class Solution {
public int rob(int[] nums) {
int[] f = new int[nums.length + 1];
f[1] = nums[0];
for (int i = 2; i <= nums.length; i++) {
f[i] = Math.max(f[i-1], f[i-2]+nums[i-1]);
}
return f[nums.length];
}
}
func rob(nums []int) int {
//特殊情况
if len(nums)<1{
return 0
}
if len(nums)==1{
return nums[0]
}
if len(nums)==2{
return max(nums[0],nums[1])
}
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(dp)-1]
}
func max(a, b int) int {
if a>b{
return a
}
return b
}
共以下 12 个回答
递推关系
终于会一道
动态规划
动态规划,dp[i]当前表示前i天最大收益
时间:O(1),空间:O(n)
时间空间复杂度为O(n)