题目
题目分析:
这道题和198题基本一样,不同的是这道题的房子arranged in a circle,所以最后一个房子和第一个房子就不能同时偷,所以我就分了两种情况进行动态规划求值。一种情况是不偷第一个房子,dp1从第二个房子开始记录,其它的正常dp求值;第二种情况是不偷最后一个房子,dp2记录到倒数第二个房子,其它的正常dp求值。最后返回两种情况的最大值。
代码
class Solution {
public int rob(int[] nums) {
int n = nums.length;
if(n == 0 || nums == null) return 0;
if(n == 1) return nums[0];
int[] dp1 = new int[n];
int[] dp2 = new int[n];
dp1[1] = nums[1];
dp2[1] = nums[0];
for(int i = 2; i < n; i++){
dp1[i] = Math.max(dp1[i - 2] + nums[i], dp1[i - 1]);
}
for(int i = 2; i < n; i++){
dp2[i] = Math.max(dp2[i - 2] + nums[i - 1], dp2[i - 1]);
}
return Math.max(dp1[n - 1], dp2[n - 1]);
}
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for House Robber II.
Memory Usage: 35.6 MB, less than 22.22% of Java online submissions for House Robber II.
Next challenges: