054_打家劫舍

知识点:动态规划、状态压缩

LeetCode第一百九十八题:https://leetcode-cn.com/problems/house-robber/submissions/

语言:GoLang

// DP解法,时间复杂度为O(n),空间复杂度可以优化为O(1)
func rob(nums []int) int {
    length := len(nums)

    if length == 0 {
        return 0
    }
    if length == 1 {
        return nums[0]
    }

    // dp := make([]int, length)
    tmp, dp_0, dp_1 :=0, nums[0], max(nums[0], nums[1])
    for i := 2; i < length; i++ {
        tmp = dp_1
        dp_1 = max(dp_1, nums[i] + dp_0)
        dp_0 = tmp
    }

    return dp_1
}

// DP解法,时间复杂度为O(n),空间复杂度O(n)
func rob(nums []int) int {
    length := len(nums)

    if length == 0 {
        return 0
    }
    if length == 1 {
        return nums[0]
    }

    dp := make([]int, length)
    dp[0], dp[1] = nums[0], max(nums[0], nums[1])
    for i := 2; i < length; i++ {
        dp[i] = max(dp[i - 1], nums[i] + dp[i - 2])
    }

    return dp[length - 1]
}


func max(a int, b int) int {
    if a > b {
        return a
    }
    return b
}
posted @ 2020-04-11 11:17  Cenyol  阅读(80)  评论(0)    收藏  举报