leetcode 213. House Robber II

原題地址

https://leetcode.com/problems/house-robber-ii/description/

題意

之前做過一題House Robber展运,意思是一個(gè)搶劫犯不能搶劫相鄰的兩座房子臭蚁,否則會觸發(fā)報(bào)警器,給出從每個(gè)房子能搶到的價(jià)值,返回?fù)尳俜改軗尩降淖畲笾怠?br> 這里規(guī)則也是一樣涵但,只不過房子變成環(huán)形排列的了涧尿,即,最后一座房子和第一座房子是相鄰的珊燎。

思路

分兩種情況轉(zhuǎn)換成之前的house robber問題:

  1. 不搶最后一座房子惭嚣。這樣就相當(dāng)于從環(huán)里去掉了最后一座房子,問題變成了簡單的house robber問題悔政,只不過房子數(shù)目由n 變?yōu)閚-1.
  2. 搶最后一座房子晚吞,這樣就相當(dāng)于去掉了第一座房子和最后兩座房子,房子長度為n-3的簡單的house robber問題谋国,最后把這個(gè)n-3的house robber問題結(jié)果加上從最后一座房子能搶到的價(jià)值槽地,就是這種情況下的最大值。
    比較以上兩種情況結(jié)果的大小芦瘾,返回較大的那一個(gè)闷盔。

踩坑

  1. 因?yàn)榈诙N情況要稍微調(diào)整一下數(shù)組的下標(biāo),可能不小心就寫錯(cuò)了旅急。
  2. 下面這個(gè)遞推公式容易搞錯(cuò)逢勾,雖然很好理解。藐吮。溺拱。記錄一下吧
dp[ i] [1] = max( dp[i-2][1], dp[i-1][0]) + nums[i]
  1. 還是上面的公式逃贝,可能把后面的+nums[i] 寫進(jìn)max的括號里,只給某個(gè)值加上迫摔。

代碼

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if(n==0) return 0;
        if(n==1) return nums[0];
        if(n==2) return max(nums[0],nums[1]);
        if(n==3) return max(max(nums[0],nums[1]),nums[2]);
        if(n==4) return max(max(nums[0]+nums[2],nums[1]),nums[1]+nums[3]);
        int dp1[n-1][2],dp2[n-3][2]; //dp[i][0]means don't take the i th value
        for(int i =0;i<n-1;i++) {
            dp1[i][0]=dp1[i][1]=0;
        }
        for(int i =0;i<n-3;i++) {
            dp2[i][0]=dp2[i][1]=0;
        }
        dp1[0][0] = 0;
        dp1[0][1] = nums[0];
        dp1[1][0] = nums[0];
        dp1[1][1] = max(nums[0],nums[1]);
        for(int i =2;i<n-1;i++){
            dp1[i][0]=max(dp1[i-1][0],dp1[i-1][1]);
            dp1[i][1]=max(dp1[i-2][1],dp1[i-1][0])+nums[i];
        }
        int result1=max(dp1[n-2][0],dp1[n-2][1]);

        dp2[0][0] = 0;
        dp2[0][1] = nums[1];
        dp2[1][0] = nums[1];
        dp2[1][1] = max(nums[1],nums[2]);
        for(int i =2;i<n-3;i++){
            dp2[i][0]=max(dp2[i-1][0],dp2[i-1][1]);
            dp2[i][1]=max(dp2[i-2][1],dp2[i-1][0])+nums[i+1];
        }
        int result2= nums[n-1]+max(dp2[n-4][0],dp2[n-4][1]);

        return max(result1,result2);
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沐扳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子句占,更是在濱河造成了極大的恐慌沪摄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纱烘,死亡現(xiàn)場離奇詭異杨拐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)擂啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門哄陶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哺壶,你說我怎么就攤上這事屋吨。” “怎么了山宾?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵至扰,是天一觀的道長。 經(jīng)常有香客問我资锰,道長敢课,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任台妆,我火速辦了婚禮翎猛,結(jié)果婚禮上胖翰,老公的妹妹穿的比我還像新娘接剩。我一直安慰自己,他們只是感情好萨咳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布懊缺。 她就那樣靜靜地躺著,像睡著了一般培他。 火紅的嫁衣襯著肌膚如雪鹃两。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天舀凛,我揣著相機(jī)與錄音俊扳,去河邊找鬼。 笑死猛遍,一個(gè)胖子當(dāng)著我的面吹牛馋记,可吹牛的內(nèi)容都是我干的号坡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼梯醒,長吁一口氣:“原來是場噩夢啊……” “哼宽堆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茸习,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤畜隶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后号胚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體籽慢,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年涕刚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗡综。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杜漠,死狀恐怖极景,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驾茴,我是刑警寧澤盼樟,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锈至,受9級特大地震影響晨缴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜峡捡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一击碗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧们拙,春花似錦稍途、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至装盯,卻和暖如春坷虑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埂奈。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工迄损, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人账磺。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓芹敌,卻偏偏與公主長得像共屈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子党窜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353