思路
这个题是打家劫舍I的变形。
把环切开就是之前的打家劫舍题了。但是这个题把环切开后需要分为两个数组来计算,因为数组汇总第一个和最后一个元素不能同时选中。
具体思路可以参照上一题的思路。
LeetCode198. 打家劫舍_想进阿里的小菜鸡的博客-CSDN博客
代码
class Solution {
public int rob(int[] nums) {
if(nums.length == 1){
return nums[0];
}
if(nums.length == 2){
return Math.max(nums[0],nums[1]);
}
int res1=robsub(nums,0,nums.length-2);
int res2=robsub(nums,1,nums.length-1);
return Math.max(res1,res2);
}
public int robsub(int[] nums,int start,int end){
int dp[] = new int[end-start+1];
dp[0] = nums[start];
dp[1]=Math.max(nums[start],nums[start+1]);
for(int i = 2;i<dp.length;i++){
dp[i]=Math.max(dp[i-2]+nums[start+i],dp[i-1]);
}
return dp[end-start];
}
}