🎢 ELI5 Park / Dynamic Programming / House Robber
Medium

House Robber

👶 The 5-Year-Old Summary

Rob houses in a line! Can't rob two adjacent houses or alarm goes off! [2,7,9,3,1] → rob 1($2)+3($9)+5($1)=12, skip 2($7) and 4($3)!

🎮 Interactive Visualizer

Houses: [2, 7, 9, 3, 1]

🧠 The Brain Hack

dp[i] = max(dp[i-1], dp[i-2] + nums[i])! Either skip current house (keep dp[i-1]) OR rob it (add to dp[i-2])!

💻 The Clean Solution

def rob(nums):
    if not nums: return 0
    if len(nums) == 1: return nums[0]
    
    # dp[i] = max money robbing up to house i
    dp = [0] * len(nums)
    dp[0] = nums[0]
    dp[1] = max(nums[0], nums[1])
    
    for i in range(2, len(nums)):
        # Skip this house OR rob it
        dp[i] = max(dp[i-1], dp[i-2] + nums[i])
    
    return dp[-1]

# [2,7,9,3,1] → 12

Time: O(n)

Space: O(1) optimized