leetcode hot100 198.打家劫舍1

106 阅读1分钟

image.png 解题思路: dp 当前房间可以选择偷与不偷两种情况,记录能偷到的最大值,得出状态方程dp[i]=max(dp[i-2]+nums[i],dp[i-1]);

/**
 * @param {number[]} nums
 * @return {number}
 */
// var rob = function(nums) {
//     if(nums.length <= 1) return nums[0];
//     if(nums.length === 2) return Math.max(nums[1], nums[0]);
//     let dp =new Array(105).fill(0); 
//     dp[0] = nums[0];
//     dp[1] = Math.max(nums[1],nums[0]);
//     for(let i = 2; i <nums.length; i++ ) {
//         dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1])
//     }
//     return dp[nums.length-1];
// };


//滚动数组进行空间压缩
var rob = function(nums) {
    let first  = nums[0], second = Math.max(nums[0], nums[1]);
    if(nums.length <= 1) return first;
    if(nums.length === 2) return second;

    for(let i = 2; i <nums.length; i++ ) {
        let temp = second;
        second = Math.max(first + nums[i], second);
        first = temp;
    }
    return second;
};