你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。
給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
示例 1:
輸入:[1,2,3,1]輸出:4解釋:偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。示例 2:偷竊到的最高金額 = 1 + 3 = 4 。
輸入:[2,7,9,3,1]輸出:12解釋:偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。先說好,我tm不是乙個專業的小偷偷竊到的最高金額 = 2 + 9 + 1 = 12 。
解題思路: 動態規劃 , 和爬樓梯一樣, 這裡的備忘錄只需要兩個整數即可
貼一下**
class solution
if(nums.length==1)
int dp1 = nums[0];
int dp2 = math.max(dp1,nums[1]);
int result = dp2;
for (int i = 2; i < nums.length; i++)
return result;
}}
198 打家劫舍
很明顯是dp問題。用乙個一維陣列表示dp陣列,狀態轉移方程為 resmax index max nums index resmax index 2 resmax index 1 其中resmax儲存,遍歷到該節點時的,最大值。注意,遍歷到該節點,但該節點不一定選。另外該題的初始解要想清楚。即resm...
198 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
198 打家劫舍
動態規劃方法 1.分解為子問題 2.遞迴定義最優解的值 3.計算最優解,自底向上 4.選出最優解 以第二個示例為例,把最後乙個1去掉,剩下的最優解dp i 1 加上1之後就有兩種情況,nums i dp i 2 和 dp i 1 那個大哪個就是最終解,於是從dp開始把每個最優解存起來,最後選出最大值...