美文网首页
leetcode_198

leetcode_198

作者: 看到这朵小fa了么 | 来源:发表于2020-05-29 10:41 被阅读0次

    动态规划,用数组来记录当前房子为K个时,最多能偷到dp[k]的钱,边界为dp[0]=nums[0],一个房子则获取它;dp[1]=Math.max(nums[0], nums[1]),两个房子取最大值,三个以上,对于第k个房子,取它则不能取k-1的房子,结果为dp[k-2]+nums[k],不取则取k-1的房子,结果为dp[k-1],可以推出动态方程:dp[k]=Math.max(dp[k-1], dp[k-2]+nums[k])

    var rob = function(nums) {
    if(nums.length<1) return 0
    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-1], dp[i-2]+nums[i])
    }
    return dp[nums.length-1]
    };
    // 压缩空间
    var rob = function(nums) {
    if(nums.length<1) return 0
    let a = nums[0]
    let b = Math.max(nums[0], nums[1])
    let c = b
    for(let i=2; i<nums.length;i++){
        c = Math.max(b, a+nums[i])
        b = a
        a = c
    }
    return c
    };
    

    相关文章

      网友评论

          本文标题:leetcode_198

          本文链接:https://www.haomeiwen.com/subject/xfhxzhtx.html