1、线性DP 198. 打家劫舍

198. 打家劫舍

https://leetcode-cn.com/problems/house-robber/

//dp动态规划,dp[i] 状态表示0-i家的盗的得最大值。那么dp[i] = (dp[i-1],dp[i-2]+nums[i])
//第i家不偷,或者第i家偷,就这两种子问题。
func rob(nums []int) int {
    n := len(nums)
    if n == 0{
        return 0
    }
    dp := make([]int,n)
    dp[0] = nums[0]
    if n>=2{
        dp[1] = MAX(nums[0],nums[1])
    }
    for i:=2;i<n;i++{
        dp[i] = MAX(dp[i-1],dp[i-2]+nums[i])
    }
    return dp[n-1]
}

func MAX(i,j int) int{
    if i<j{
        return j
    }else{
        return i
    }
}

  优化 下存储空间

//dp动态规划,dp[i] 状态表示0-i家的盗的得最大值。那么dp[i] = (dp[i-1],dp[i-2]+nums[i])
//第i家不偷,或者第i家偷,就这两种子问题。
func rob(nums []int) int {
    n := len(nums)
    if n == 0{
        return 0
    }
    curMax := 0
    preMax := 0
    for i:=0;i<n;i++{
        tmp := curMax
        curMax = Max(curMax,preMax+nums[i])
        preMax = tmp
    }
    return curMax
}

func Max(i,j int) int{
    if i<j{
        return j
    }else{
        return i
    }
}

  

原文地址:https://www.cnblogs.com/wsw-seu/p/12764410.html