1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public int rob(int[] nums) { int n = nums.length; int[][][] dp = new int[n+1][2][2]; dp[1][0][0] = 0; dp[1][1][1] = nums[0]; for(int i = 2; i <= n; i++){ if(i == 2){ dp[i][0][0] = dp[i-1][0][0]; }else{ dp[i][0][0] = Math.max(dp[i-1][0][0],dp[i-1][1][0]); } dp[i][1][0] = dp[i-1][0][0] + nums[i-1];
if(i == n){ dp[i][0][1] = Math.max(dp[i-1][0][1],dp[i-1][1][1]); }else{ dp[i][0][1] = Math.max(dp[i-1][0][1],dp[i-1][1][1]); dp[i][1][1] = dp[i-1][0][1] + nums[i-1]; } }
int result1 = Math.max(dp[n][0][0], dp[n][1][0]); int result2 = Math.max(dp[n][0][1], dp[n][1][1]); return Math.max(result1, result2); } }
|