本文主要是介绍LeetCode //C - 198. House Robber,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
198. House Robber
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security systems connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given an integer array nums representing the amount of money of each house, return the maximum amount of money you can rob tonight without alerting the police.
Example 1:
Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.
Example 2:
Input: nums = [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
Total amount you can rob = 2 + 9 + 1 = 12.
Constraints:
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 400
From: LeetCode
Link: 198. House Robber
Solution:
Ideas:
- We handle base cases where the size of nums is 0 or 1.
- We create an array dp to store the maximum amount that can be robbed up to each house.
- The first element of dp is the amount in the first house, and the second element is the maximum of the first two houses.
- For each subsequent house i, we calculate the maximum amount that can be robbed by comparing:
- The amount robbed by robbing the current house i (which is nums[i] + dp[i - 2]) and not robbing the immediate previous house.
- The amount robbed by not robbing the current house (which is dp[i - 1]).
- Finally, we return the last element of the dp array, which represents the maximum amount that can be robbed from the entire street.
Code:
int rob(int* nums, int numsSize) {if (numsSize == 0) return 0;if (numsSize == 1) return nums[0];int dp[numsSize];dp[0] = nums[0];dp[1] = nums[1] > nums[0] ? nums[1] : nums[0];for (int i = 2; i < numsSize; i++) {dp[i] = (nums[i] + dp[i - 2]) > dp[i - 1] ? nums[i] + dp[i - 2] : dp[i - 1];}return dp[numsSize - 1];
}
这篇关于LeetCode //C - 198. House Robber的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!