# 13 Lines O(n) Java Solution with Explanation

• ``````public int rob(int[] nums) {
if (nums.length == 0) return 0;
if (nums.length == 1) return nums[0];
int rob1Y = nums[0], rob1N = 0;
int rob2Y = nums[0], rob2N = nums[1];
for (int i = 2; i < nums.length - 1; i++) {
int tempY = Math.max(nums[i] + rob1Y, rob2Y);
int tempN = Math.max(nums[i] + rob1N, rob2N);
rob1Y = rob2Y; rob1N = rob2N;
rob2Y = tempY; rob2N = tempN;
}
// maxA means rob the last house, maxB means not
int maxA = nums[nums.length - 1] + rob1N;
int maxB = Math.max(Math.max(rob1Y, rob1N), Math.max(rob2Y, rob2N));
return Math.max(maxA, maxB);
}
``````

Problem House-Robber-I (No.198) use integers to store the result of (n-2) and (n-1),

As a circle, this solution divide both of the previous results into two result: rob the first or not.

Then we got 4 integers:

rob1Y: n-2 and rob the first, rob1N: n-2 and not rob the first

rob2Y: n-1 and rob the first, rob2N: n-1 and not rob the first

Finally, we only need to consider the situation of the last one and got the result easily.

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.