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:
c 复制代码
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];
}
相关推荐
无尽的罚坐人生7 分钟前
hot 100 543. 二叉树的直径
数据结构·算法·leetcode
wuqingshun31415911 分钟前
蓝桥杯 契合匹配
算法
jimy112 分钟前
字节流(XML、JSON、文件、网络、图像、加密…)必须用无符号语义unsigned char
xml·c语言·网络·json
进击的小头15 分钟前
第5篇:最优控制问题的组成
python·算法
轻颂呀16 分钟前
排序——堆排序
数据结构·算法
WolfGang00732118 分钟前
代码随想录算法训练营 Day07 | 字符串 part01
数据结构·算法·leetcode
luckycoding18 分钟前
488. 祖玛游戏
算法·游戏·深度优先
8Qi824 分钟前
LeetCode61. 旋转链表
c语言·数据结构·c++·算法·leetcode·链表·力扣
眼眸流转27 分钟前
LeetCode热题100(一)
算法·leetcode
渡过晚枫28 分钟前
[第十六届蓝桥杯/java/算法]1.偏蓝
java·算法·蓝桥杯