题目链接
题目描述
实现代码
思路:其实爬楼梯类似,不过每次必须爬>1的楼梯;
记dp[i]表示有i家住户的情况能偷窃到的最大金额,可以知道结果只与前两个位置有关,相邻的位置不取第i个住户,中间隔了两个位置的偷窃第i个住户,则有状态转移方程:
dp[i] = min(dp[i-1], dp[i-2] + nums[i]);
实现代码如下:
class Solution {public int rob(int[] nums) {int n = nums.length;if(n == 1) {return nums[0];}int[] dp = new int[n];dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);for(int i=2; i<n; i++) {dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i]);}return dp[n-1];}}
