前情提要:House Robber I
原题地址:点我传送
根据前面的思路,成圈后的问题在于最后一个的取舍与第一个的取舍有关,这样考虑:若抢第一个,则最后一个不能抢,倒数第二个和第一个的取舍独立,这就是第一题的情况,同样,若不抢第一个,则第二个与最后一个的取舍独立,同样是第一题的情况,因此可以解答。
Java:
public class Solution {
static public int max(int a,int b)
{
return a>b?a:b;
}
static public int rob_line(int[] nums,int start,int end) {
int n = nums.length;
int rob=0;
int norob=0;
for(int i=start;i<=end;i++)
{
int temp = rob;
rob = norob + nums[i];
norob = max(temp, norob);
}
return max(rob,norob);
}
public int rob(int[] nums)
{
int n = nums.length;
if (n == 1)
{
return nums[0];
}
else return max(rob_line(nums, 0, n- 2), rob_line(nums, 1, n - 1));
}
}