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];
}
相关推荐
知识分享小能手7 分钟前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
爱读书的小胖14 分钟前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy15 分钟前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
上班摸鱼下班游戏19 分钟前
Unity 仿生智能算法 从蚁群算法 开始
算法·unity·游戏引擎
pipixia2003330 分钟前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
Navigator_Z2 小时前
LeetCode //C - 1300. Sum of Mutated Array Closest to Target
c语言·算法·leetcode
SZYSK2 小时前
鸿蒙人脸识别算法放在终端里:和外挂授权 SDK 差在排障路径
物联网·算法·华为·harmonyos
凯瑟琳.奥古斯特2 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun613 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
qz_Serene3 小时前
练习算法题:双指针 -cpp
c++·算法·leetcode·1024程序员节