198. 打家劫舍

84 阅读1分钟

题目:
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ho… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法:

方法一:动态规划

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])
    ans := max(dp[0], dp[1])
    for i := 2; i < len(nums); i ++ {
        dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
        if dp[i] > ans {
            ans = dp[i]
        }
    }
    return ans
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}