LeetCode 198. 打家劫舍

題目鏈接:
https://leetcode-cn.com/problems/house-robber/description/

你是一個(gè)專業(yè)的小偷淋叶,計(jì)劃偷竊沿街的房屋。每間房?jī)?nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會(huì)自動(dòng)報(bào)警危尿。

給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你在不觸動(dòng)警報(bào)裝置的情況下馁痴,能夠偷竊到的最高金額谊娇。

示例 1:

輸入: [1,2,3,1]
輸出: 4
解釋: 偷竊 1 號(hào)房屋 (金額 = 1) ,然后偷竊 3 號(hào)房屋 (金額 = 3)罗晕。
     偷竊到的最高金額 = 1 + 3 = 4 济欢。

示例 2:

輸入: [2,7,9,3,1]
輸出: 12
解釋: 偷竊 1 號(hào)房屋 (金額 = 2), 偷竊 3 號(hào)房屋 (金額 = 9)赠堵,接著偷竊 5 號(hào)房屋 (金額 = 1)。
     偷竊到的最高金額 = 2 + 9 + 1 = 12 法褥。

解題思路

1茫叭、首先想一想如果是暴力如何做?
假設(shè)從最后一家店鋪開始搶半等,那么只會(huì)遇到2種情況揍愁,即:搶這家店和下下家店,或者不搶這家店杀饵。所以我們得到遞歸的公式:
Math.max(solve(nums,index-1),solve(nums,index-2)+nums[index]);
2莽囤、上面的暴力算法雖然能夠得到正確的結(jié)果,但是顯然遞歸的效率是很低的切距,如果有n家店鋪朽缎,每家店鋪有2種可能,那么時(shí)間復(fù)雜度就是2的n次方蔚舀。那么如何優(yōu)化呢?
我們分析一下:
如果我們開始搶的是第n-1家店锨络,那么后面可以是(n-3,n-4,n-5,n-6....);
如果我們開始搶的是第n-2家店赌躺,那么后面可以是(n-4,n-5,n-6,....);
那么這兩種情況顯然n-3之后的n-4,n-5,n-6,....都重復(fù)計(jì)算了。顯然這里有非常大的優(yōu)化空間羡儿。通常我們使用空間來(lái)?yè)Q時(shí)間礼患,即用一個(gè)數(shù)組記錄每次計(jì)算的結(jié)果,這樣每次情況只需要計(jì)算一次掠归,再次遇到只需直接返回結(jié)果即可缅叠,大大優(yōu)化了時(shí)間。

代碼如下:

class Solution {    
    public static int[] result;    
    public int solve(int[] nums,int index){
        if(index < 0){
             return 0;
        }      
        if(result[index] >= 0){
            return result[index];
        }
        result[index]=Math.max(solve(nums,index-1),solve(nums,index-2)+nums[index]);
        return result[index];        
    }    
    public int rob(int[] nums) {
        result = new int[nums.length];
        for(int i=0;i<nums.length;i++){
            result[i]=-1;
        }
        return solve(nums,nums.length-1);        
    }
}

總結(jié)

這道題就是動(dòng)態(tài)規(guī)劃虏冻,其本質(zhì)是在遞歸的思想上進(jìn)行優(yōu)化肤粱。
原問題(N)-->子問題(N-1)-->原問題(N)

最優(yōu)子結(jié)構(gòu)

1、子問題最優(yōu)決策可導(dǎo)出原問題的最優(yōu)決策厨相。
2领曼、無(wú)后效性

重疊子問題

1、去冗余
2蛮穿、空間換時(shí)間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庶骄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子践磅,更是在濱河造成了極大的恐慌单刁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府适,死亡現(xiàn)場(chǎng)離奇詭異羔飞,居然都是意外死亡肺樟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門褥傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儡嘶,“玉大人,你說我怎么就攤上這事恍风”目瘢” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵朋贬,是天一觀的道長(zhǎng)凯楔。 經(jīng)常有香客問我,道長(zhǎng)锦募,這世上最難降的妖魔是什么摆屯? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮糠亩,結(jié)果婚禮上虐骑,老公的妹妹穿的比我還像新娘。我一直安慰自己赎线,他們只是感情好廷没,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垂寥,像睡著了一般颠黎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滞项,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天狭归,我揣著相機(jī)與錄音,去河邊找鬼文判。 笑死过椎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戏仓。 我是一名探鬼主播潭流,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柜去!你這毒婦竟也來(lái)了灰嫉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗓奢,失蹤者是張志新(化名)和其女友劉穎讼撒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡根盒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年钳幅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炎滞。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敢艰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出册赛,到底是詐尸還是另有隱情钠导,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布森瘪,位于F島的核電站牡属,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扼睬。R本人自食惡果不足惜逮栅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窗宇。 院中可真熱鬧措伐,春花似錦、人聲如沸军俊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蝇完。三九已至官硝,卻和暖如春矗蕊,著一層夾襖步出監(jiān)牢的瞬間短蜕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工傻咖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朋魔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓卿操,卻偏偏與公主長(zhǎng)得像警检,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子害淤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)扇雕。 張土汪:刷leetcod...
    土汪閱讀 12,724評(píng)論 0 33
  • 本文內(nèi)容為練習(xí)LeetCode題目時(shí)的解題思路和不同算法的記錄,實(shí)現(xiàn)語(yǔ)言為C++窥摄,代碼保存在Github镶奉,均已在L...
    SK木眠閱讀 985評(píng)論 0 0
  • https://github.com/PizzaLiu/PHP-FIG PSR(Proposing a Stand...
    wsdadan閱讀 3,226評(píng)論 0 2
  • “人老先老腿,樹老先老根”,人們往往都是這么說哨苛,也是這么認(rèn)為的鸽凶,今天就讓我們一起來(lái)認(rèn)識(shí)一下這些知識(shí)誤區(qū),也讓我們來(lái)...
    過云雨Milo閱讀 463評(píng)論 2 1