class Solution {
public int rob(int[] nums) {
if(nums.length ==1 )
return nums[0];
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = nums[0] > nums[1]?nums[0]:nums[1];
for(int i = 2;i<nums.length;i++)
dp[i] = Math.max(dp[i-1],dp[i-2]+nums[i]);
return dp[nums.length-1];
}
}
【题目2】上题房间形成一个环,首位不能一起偷
思路分析:把两种情况分开,两间只偷一间,算最大
class Solution {
public int rob(int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int len = nums.length;
if (len == 1)
return nums[0];
return Math.max(robAction(nums, 0, len - 1), robAction(nums, 1, len));
}
int robAction(int[] nums, int start, int end) {
int x = 0, y = 0, z = 0;
for (int i = start; i < end; i++) {
y = z;
z = Math.max(y, x + nums[i]);
x = y;
}
return z;
}
}