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 <= numsi <= 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 numsi + dpi - 2) and not robbing the immediate previous house.
    • The amount robbed by not robbing the current house (which is dpi - 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];
}
相关推荐
古城小栈2 小时前
为啥说:训练用BF16,推理用FP16
人工智能·算法·机器学习
KaMeidebaby2 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
时间的拾荒人2 小时前
C语言字符函数与字符串函数完全指南
c语言·开发语言
Turbo正则2 小时前
群论在AI中的应用概述
人工智能·算法·抽象代数
ysa0510302 小时前
【并查集】判环
c++·笔记·算法
持力行3 小时前
C/C++ 中的 char*:它标识数组吗?为什么能用下标访问?
c语言·c++
Jerry3 小时前
KeetCode 44. 开发商购买土地
算法
Jerry3 小时前
KeetCode 58. 区间和
算法
Jerry4 小时前
LeetCode 209. 长度最小的子数组
算法
彦为君4 小时前
算法思维与经典智力题
java·前端·redis·算法