每日刷題 打家劫舍

2021-10-02 02:00:27 字數 759 閱讀 3936

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

示例:

例 1:

輸入: [1,2,3,1]

輸出: 4

解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。偷竊到的最高金額 = 1 + 3 = 4 。

例 2:

輸入: [2,7,9,3,1]

輸出: 12

解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。偷竊到的最高金額 = 2 + 9 + 1 = 12 。

閱讀題目之後,可以發現題中存在重疊子問題,此時就要想到動態規劃。

從最基本的開始考慮:

當陣列中乙個元素也沒有時,自然會返回 0.

當陣列中存在乙個元素時,返回該元素即可。

當陣列中存在兩個元素時,返回二者的較大值即可。

當陣列中存在三個元素時,例如 a[0], a[1], a[2], 返回值應該是 max( a[0] + a[2], a[1]).

據此,寫出以下**:

class

solution

};

上述**存在優化的空間。

刷題筆記 打家劫舍

定義 dp i 為當小偷洗劫了第 i 家的情況下,他能偷竊到的最大金額。定義 money 0 為截止到第 i 2 戶人家,小偷得到的最大盜竊金額,money 1 為截至第 i 1 戶人家的情況。定義 robmax 為他走過第 i 1 家之後,能偷竊到的最大金額。偷竊了第i家就不能偷竊第i 1家,所以...

每日刷題總結

public class parent voidm2 protected voidm3 public static voidm4 a.子類中一定能夠繼承和覆蓋parent類的m1方法 b.子類中一定能夠繼承和覆蓋parent類的m2方法 c.子類中一定能夠繼承和覆蓋parent類的m3方法 d.子類...

leetcode每日刷題

題目描述 有效括號字串為空 a 或 a b,其中 a 和 b 都是有效的括號字串,代表字串的連線。例如,和 都是有效的括號字串。如果有效字串 s 非空,且不存在將其拆分為 s a b 的方法,我們稱其為原語 primitive 其中 a 和 b 都是非空有效括號字串。給出乙個非空有效字串 s,考慮將...