代碼隨想錄打卡:打家劫舍篇

在打家劫舍問題中丹喻,不一定需要dp數(shù)組贱鄙,需要記錄狀態(tài)值,要脫離背包思維潮罪,已經(jīng)不是背包問題了康谆,沒有物品和背包容量的概念了

LeetCode 198

題目連接:打家劫舍I
對于這道題來說,其實并不需要dp數(shù)組嫉到,只需要記錄前兩位的狀態(tài)即可沃暗,當前位置的狀態(tài)僅僅與前兩位的狀態(tài)有關(guān)

class Solution {
    public int rob(int[] nums) {
        //dp[j]為偷到第j家最多能偷多少
        int[] dp = new int[nums.length+1];

        //初始化
        dp[0] = 0;
        dp[1] = nums[0];
        for(int j=2; j<=nums.length; j++){
            dp[j] = Math.max(dp[j-1], dp[j-2]+nums[j-1]);
        }
        return dp[nums.length];
    }
}

LeetCode 213

題目連接:打家劫舍II

這道題實現(xiàn)了只用兩個狀態(tài)遞推的方式,核心代碼為

/*如果寫為
first = second; 
second = cur; 
cur = Math.max(first + nums[i], second);
不利于第一個節(jié)點的處理何恶,會出現(xiàn)邊界問題孽锥,還需要進一步分情況處理
*/
second = cur; 
cur = Math.max(first + nums[i], second);
first = second;

這樣的賦值方式,有利于處理第一個節(jié)點(邊界問題)

而這道題的解題思路也是對的细层,就是分開考慮會成環(huán)的頭尾節(jié)點惜辑,分別計算沒有尾節(jié)點的序列最大值和沒有頭節(jié)點的序列最大值,并選出更大的那一個作為結(jié)果

class Solution {
    public int rob(int[] nums) {
        if(nums.length==1) return nums[0];

        //去除尾元素疫赎,求得最大值
        int first = 0;
        int second = 0;
        int cur = 0;
        for(int i=0; i<nums.length-1; i++){
            second = cur;
            cur = Math.max(first + nums[i], second);
            first = second;
        }

        //去除頭元素
        first = 0;
        second = 0;
        int cur_2 = 0;
        for(int i=1; i<nums.length; i++){
            second = cur_2;
            cur_2 = Math.max(first + nums[i], second);
            first = second;
        }
        return Math.max(cur, cur_2);
    }
}

LeetCode 337

題目連接:打家劫舍III
樹形dp盛撑,問題一開始嘗試使用層序遍歷,認為為了最大化捧搞,選了一層的某一個元素抵卫,應(yīng)該把整層都選上狮荔,失敗用例如下:

失敗案例.png

所以關(guān)鍵還是要用樹形dp的思路,只要遇到了不會的樹題介粘,都可以考慮后序遍歷遞歸的做法
這道題在看了題解之后自己嘗試做的過程中轴合,在不選cur的情況下,注意是
result[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);而不應(yīng)該為result[0] = left[1]+right[1];

class Solution {
    public int rob(TreeNode root) {
        int [] result = treeDp(root);
        return Math.max(result[0], result[1]);
        
    }
    public int[] treeDp(TreeNode cur){
        int[] result = new int[2];
        if(cur==null) return result;

        int[] left = treeDp(cur.left);
        int[] right = treeDp(cur.right);

        //不選cur
        result[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
        //選cur
        result[1] = left[0] + right[0] + cur.val;
        return result;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碗短,一起剝皮案震驚了整個濱河市受葛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偎谁,老刑警劉巖总滩,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巡雨,居然都是意外死亡闰渔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門铐望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冈涧,“玉大人,你說我怎么就攤上這事正蛙《焦” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵乒验,是天一觀的道長愚隧。 經(jīng)常有香客問我,道長锻全,這世上最難降的妖魔是什么狂塘? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鳄厌,結(jié)果婚禮上荞胡,老公的妹妹穿的比我還像新娘。我一直安慰自己了嚎,他們只是感情好泪漂,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著新思,像睡著了一般窖梁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夹囚,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天纵刘,我揣著相機與錄音,去河邊找鬼荸哟。 笑死假哎,一個胖子當著我的面吹牛瞬捕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舵抹,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼肪虎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惧蛹?” 一聲冷哼從身側(cè)響起扇救,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎香嗓,沒想到半個月后迅腔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡靠娱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年沧烈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片像云。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡锌雀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迅诬,到底是詐尸還是另有隱情腋逆,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布百框,位于F島的核電站闲礼,受9級特大地震影響牍汹,放射性物質(zhì)發(fā)生泄漏铐维。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一慎菲、第九天 我趴在偏房一處隱蔽的房頂上張望嫁蛇。 院中可真熱鬧,春花似錦露该、人聲如沸睬棚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抑党。三九已至,卻和暖如春撵摆,著一層夾襖步出監(jiān)牢的瞬間底靠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工特铝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暑中,地道東北人壹瘟。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鳄逾,于是被迫代替她去往敵國和親稻轨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容