Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from typing import List


class Solution:
def rob(self, nums: List[int]) -> int:
"""
Dynamic Programming approach:
- For each house, we choose max of:
1. Rob current house + max money from i-2 houses
2. Skip current house and take max money from i-1 houses

Time: O(n), Space: O(1)
"""
if not nums:
return 0
if len(nums) == 1:
return nums[0]

# prev2: max money robbed up to i-2
# prev1: max money robbed up to i-1
prev2 = nums[0]
prev1 = max(nums[0], nums[1])

for i in range(2, len(nums)):
current = max(nums[i] + prev2, prev1)
prev2 = prev1
prev1 = current

return prev1
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
function rob(nums: number[]): number {
/**
* Dynamic Programming approach:
* - For each house, we choose max of:
* 1. Rob current house + max money from i-2 houses
* 2. Skip current house and take max money from i-1 houses
*
* Time: O(n), Space: O(1)
*/
if (nums.length === 0) return 0;
if (nums.length === 1) return nums[0];

// prev2: max money robbed up to i-2
// prev1: max money robbed up to i-1
let prev2 = nums[0];
let prev1 = Math.max(nums[0], nums[1]);

for (let i = 2; i < nums.length; i++) {
const current = Math.max(nums[i] + prev2, prev1);
prev2 = prev1;
prev1 = current;
}

return prev1;
}

// Example usage:
// console.log(rob([1, 2, 3, 1])); // Output: 4
// console.log(rob([2, 7, 9, 3, 1])); // Output: 12
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import unittest
from src.my_project.interviews.top_150_questions_round_22\
.ex_133_house_robber import Solution


class HouseRobberTestCase(unittest.TestCase):
def setUp(self):
self.solution = Solution()

def test_example_1(self):
"""Test case: [1,2,3,1] -> 4"""
nums = [1, 2, 3, 1]
self.assertEqual(self.solution.rob(nums), 4)

def test_example_2(self):
"""Test case: [2,7,9,3,1] -> 12"""
nums = [2, 7, 9, 3, 1]
self.assertEqual(self.solution.rob(nums), 12)

def test_single_house(self):
"""Test case: Single house"""
nums = [5]
self.assertEqual(self.solution.rob(nums), 5)

def test_two_houses(self):
"""Test case: Two houses"""
nums = [1, 2]
self.assertEqual(self.solution.rob(nums), 2)

def test_all_same_value(self):
"""Test case: All houses have same value"""
nums = [5, 5, 5, 5, 5]
self.assertEqual(self.solution.rob(nums), 15)

def test_ascending_values(self):
"""Test case: Ascending values"""
nums = [1, 2, 3, 4, 5]
self.assertEqual(self.solution.rob(nums), 9)


if __name__ == '__main__':
unittest.main()
Loading