198.打家劫舍
198.打家劫舍
题解
题目:数组中相邻的元素不能相加,求数组中满足这个条件进行相加的最大值
思路:
state: dp[n]:递推到第n个元素时的最大值 function: dp[i] = max(dp[i-2]+nums[i-1], dp[i-1]) //加当前的元素,所以前一个不能用,所以是dp[i-2],或者不加当前的元素,最大值就是上一个状态的值了 intialize: dp[1] = nums[0] answer: dp[n]
代码
func rob(nums []int) int { n := len(nums) dp := make([]int, n+1) dp[1] = nums[0] for i := 2; i <= n; i++ { dp[i] = max(dp[i-2]+nums[i-1], dp[i-1]) } return dp[n] } func max(i, j int) int { if i > j { return i } return j }