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
}