Question:
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.
Solution:
public class Solution {
public int rob(int[] nums) {
int len=nums.length;
if(len==0||nums==null)
return 0;
else if(len==1)
return nums[0];
else if(len==2)
return nums[0]>nums[1]?nums[0]:nums[1];
else
return Math.max(rob_line(nums,0,len-2),rob_line(nums,1,len-1));
}
public int rob_line(int[] nums, int low, int high)
{
int include=0;
int exclude=0;
int k=0;
for(k=low;k<=high;k++)
{
int i=include;
int e=exclude;
include=nums[k]+e;
exclude=Math.max(i,e);
}
return Math.max(include,exclude);
}
}