213. House Robber II
Note: This is an extension of House Robber.
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
public class Solution {
public int rob(int[] nums) {
if (nums.length==0) return 0;
if (nums.length==1) return nums[0];
int[] money1= new int[nums.length];
int[] money2= new int[nums.length];
int bonus1=0, bonus2=0;
money1[0]= 0;
money1[1]= nums[1];
for (int i = 2; i < nums.length; i++) {
money1[i]= Math.max(nums[i]+money1[i-2], money1[i-1]);
}
bonus1= money1[nums.length-1];
money2[0]= nums[0];
money2[1]= nums[0];
for (int i = 2; i < nums.length-1; i++) {
money2[i]= Math.max(nums[i]+money2[i-2], money2[i-1]);
}
bonus2= money2[nums.length-2];
return Math.max(bonus1, bonus2);
}
}