题目
思路
- 感觉是动态规划,要不从0开始抢 要不从1开始抢
- dp[i]代表必须抢劫第i户时的最高金额,但是其有可能抢i-2户和抢i-3户,因为无法抢劫i-1户,且如果抢劫i-4户的话那么也可以抢i-2户,所以只需要考虑抢i-2和i-3j即可
代码
public int rob(int[] nums) {
if(nums.length<2) return nums[0];
//感觉是动态规划
int[] dp = new int[nums.length];
int ans = Integer.MIN_VALUE;
//要不从0开始抢 要不从1开始抢
dp[0]=nums[0];
dp[1]=nums[1];
ans = Math.max(dp[0],dp[1]);
//dp[i]代表必须抢劫第i户时的最高金额
//但是其有可能不抢i-2户而抢i-3户
for(int i=2;i<nums.length;i++){
if(i-3>=0) dp[i]=Math.max(nums[i]+dp[i-2],nums[i]+dp[i-3]);
else dp[i]=nums[i]+dp[i-2];
ans = Math.max(ans,dp[i]);
}
return ans;
}