package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev

# README

198. House Robber

Solution idea

My Solution

Define $DP[i]$: max sum ending at i (e.g. max sum of nums[0...i])

Recurrence:

Base case 1: $DP[0] = nums[0]$

Base case 2: $DP[1] = \max (nums[0], nums[1])$

Case 1: $DP[i] = \max(DP[j] + nums[i])$ for $ 0 \leq j < i-1 $

Case 2: $DP[i] = DP[i-1]$

$DP[i] = \max(Case 1, Case 2)$

result $= DP[n-1]$

Time = $O(n^2)$

But my solution should work for the situation where there are negative entries.

Optimizing Solution

Assume all entries $\geq 0$.

Recurrence:

$DP[i] = \max(DP[i-1], DP[i-2] + nums[i])$ since we know $DP[i]$ must be non-decreasing as i increases.

Time = $O(n)$, Space = $O(n)$

Optimizing Solution Again for Space

Since $DP[i]$ only depends on $DP[i-1], DP[i-2]$, we can use two variables to record them instead of creating a whole slice