他說我是一個專業的小偷,然後每棟房屋裡都有一定的現金,但限制是相鄰的房屋都連接了保全系統,如果同一晚偷了相鄰的兩間房,那系統會自動報警。
所以他會給我們每棟房屋的金額,我們要計算並迴傳今天可以偷到的最大值。
這題的規定就是:不能偷相鄰的兩棟,所以我就要決定,我是要偷現在這間+上上家比較多還是前面一間比較多。
那就是我們要寫一個來選擇誰比較多的了,所以我想說可以用也是費波那契數的概念,只是我要選擇這個數+上上個多還是上一個比較多,就用了max()來幫我決定我要偷最多的那一個選擇,就是動態規劃+選擇啦。
class Solution {
public int rob(int[] nums) {
int n = nums.length;
if (n == 1) return nums[0]; //如果只有一間就直接偷他
int prev2 = nums[0]; // 偷到第i-2的最大值
int prev1 = Math.max(nums[0], nums[1]); // 偷到第i-1的最大值
for (int i = 2; i < n; i++) {
int current = Math.max(prev1, prev2 + nums[i]); //選要這間+上上間或是上一間
prev2 = prev1;
prev1 = current;
}
return prev1;
}
}
執行成功!