3840. House Robber V
Description
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed and is protected by a security system with a color code.
You are given two integer arrays nums and colors, both of length n, where nums[i] is the amount of money in the ith house and colors[i] is the color code of that house.
You cannot rob two adjacent houses if they share the same color code.
Return the maximum amount of money you can rob.
Β
Example 1:
Input: nums = [1,4,3,5], colors = [1,1,2,2]
Output: 9
Explanation:
- Choose houses
i = 1withnums[1] = 4andi = 3withnums[3] = 5because they are non-adjacent. - Thus, the total amount robbed is
4 + 5 = 9.
Example 2:
Input: nums = [3,1,2,4], colors = [2,3,2,2]
Output: 8
Explanation:
- Choose houses
i = 0withnums[0] = 3,i = 1withnums[1] = 1, andi = 3withnums[3] = 4. - This selection is valid because houses
i = 0andi = 1have different colors, and housei = 3is non-adjacent toi = 1. - Thus, the total amount robbed is
3 + 1 + 4 = 8.
Example 3:
Input: nums = [10,1,3,9], colors = [1,1,1,2]
Output: 22
Explanation:
- Choose houses
i = 0withnums[0] = 10,i = 2withnums[2] = 3, andi = 3withnums[3] = 9. - This selection is valid because houses
i = 0andi = 2are non-adjacent, and housesi = 2andi = 3have different colors. - Thus, the total amount robbed is
10 + 3 + 9 = 22.
Β
Constraints:
1 <= n == nums.length == colors.length <= 1051 <= nums[i], colors[i] <= 105
Solutions
Solution 1: Dynamic Programming
We define two variables \(f\) and \(g\), where \(f\) represents the maximum amount when the current house is not robbed, and \(g\) represents the maximum amount when the current house is robbed. Initially, \(f = 0\) and \(g = nums[0]\). The answer is \(\max(f, g)\).
Next, we traverse starting from the second house:
- If the current house has the same color as the previous house, then \(f\) is updated to \(\max(f, g)\), and \(g\) is updated to \(f + nums[i]\).
- If the current house has a different color from the previous house, then \(f\) is updated to \(\max(f, g)\), and \(g\) is updated to \(\max(f, g) + nums[i]\).
Finally, return \(\max(f, g)\).
The time complexity is \(O(n)\), where \(n\) is the number of houses. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |