你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有必定的現金,影響你偷竊的惟一制約因素就是相鄰的房屋裝有相互連通的防盜系統,若是兩間相鄰的房屋在同一夜被小偷闖入,系統會自動報警。數組
給定一個表明每一個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的狀況下,可以偷竊到的最高金額。ui
示例 1:this
輸入: [1,2,3,1] 輸出: 4 解釋: 偷竊 1 號房屋 (金額 = 1) ,而後偷竊 3 號房屋 (金額 = 3)。 偷竊到的最高金額 = 1 + 3 = 4 。spa
示例 2:code
輸入: [2,7,9,3,1] 輸出: 12 解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接着偷竊 5 號房屋 (金額 = 1)。 偷竊到的最高金額 = 2 + 9 + 1 = 12 。io
max(房屋4的錢+dp[2], dp[3])
;因此狀態方程爲:max(dp[n-2] + thisValue, dp[n-1])
, 代碼爲:function
var rob = function(nums) {
// 判斷異常
if(!nums || nums.length === 0){
return 0;
}
// 邊界條件
if(nums.length < 3){
return Math.max(...nums);
}
// 狀態方程 dp(i) = max( dp(i-1) , dp(2) + arr[i])
let dp = [];
dp[0] = nums[0];
dp[1] = Math.max(nums[0],nums[1]);
for(let i = 2; i < nums.length; i++){
dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1]);
}
return dp[dp.length-1];
};
複製代碼
待續...class