【golang】leetcode初级-最大子序和&打家劫舍

什么是动态规划

https://zhuanlan.zhihu.com/p/...

第一题 最大子序和

题目信息

【golang】leetcode初级-最大子序和&打家劫舍_第1张图片

解题思路

【golang】leetcode初级-最大子序和&打家劫舍_第2张图片
【golang】leetcode初级-最大子序和&打家劫舍_第3张图片
一开始在思考的时候走错了方向
【golang】leetcode初级-最大子序和&打家劫舍_第4张图片
直到看到这条评论得到了启发

错误代码如下
【golang】leetcode初级-最大子序和&打家劫舍_第5张图片
正确代码如下

func maxSubArray(nums []int) int {
    max := nums[0]
    for i := 1; i < len(nums); i++ {
        if nums[i] + nums[i-1] > nums[i] {
            nums[i] += nums[i-1]
        }
        if nums[i] > max {
            max = nums[i]
        }
    }
    return max
}

第二题 打家劫舍

题目信息

【golang】leetcode初级-最大子序和&打家劫舍_第6张图片

解题思路

同样为多决策问题,动态规划可以快速的解决
【golang】leetcode初级-最大子序和&打家劫舍_第7张图片

代码

func rob(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    if len(nums) == 1 {
        return nums[0]
    }
    dp := make([]int, len(nums))
    dp[0] = nums[0]
    dp[1] = max(nums[0], nums[1])
    for i := 2; i < len(nums); i++ {
        dp[i] = max(dp[i-2] + nums[i], dp[i-1])
    }
    return dp[len(nums)-1]
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/house-robber/solution/da-jia-jie-she-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(【golang】leetcode初级-最大子序和&打家劫舍)