打家劫舍(LeetCode-198)

简介: 打家劫舍(LeetCode-198)

打家劫舍(LeetCode-198)


题目

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。


给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。


示例 1:

输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。


示例 2:

输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
     偷窃到的最高金额 = 2 + 9 + 1 = 12 。


提示:


1 <= nums.length <= 100

0 <= nums[i] <= 400


思路

五部曲


dp[i]含义


偷窃前 i 个房子(包括房子i)可以获取的最大金额

递推公式


d p [ i ] = m a x ( d p [ i − 1 ] , d p [ i − 2 ] + n u m s [ i ] )


数组初始化


dp[0]=0 dp[1]=nums[0]


遍历顺序


从前往后


代码

class Solution
{
public:
    int rob(vector<int> &nums)
    {
        int n = nums.size();
        if (n == 1)
        {
            return nums[0];
        }
        if (n == 2)
        {
            return max(nums[0], nums[1]);
        }
        vector<int> dp(2);
        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        int result;
        for (int i = 2; i < n; i++)
        {
            result = max(dp[1], dp[0] + nums[i]);
            dp[0] = dp[1];
            dp[1] = result;
        }
        return result;
    }
};
目录
相关文章
|
5月前
|
人工智能 数据可视化 API
Daggr:介于 Gradio 和 ComfyUI 之间的 AI 工作流可视化方案
Daggr 是一款代码优先的 Python 库,专为调试复杂 AI 工作流而生。它将 Python 定义的 Gradio/模型调用等节点自动转为可交互可视化图,支持实时查看中间状态、单独重跑节点、追溯历史输入输出,告别 print 调试与状态迷失。
409 2
Daggr:介于 Gradio 和 ComfyUI 之间的 AI 工作流可视化方案
|
6月前
|
定位技术 API 网络安全
2026年网站建设需要多少钱?
网站建设费用从千元到数十万元不等,主要取决于开发方式、功能复杂度及设计需求。模板站成本最低,定制开发适中,复杂系统费用最高。建议明确核心需求,选择匹配方案,并关注长期维护成本与隐性费用。
3735 8
|
JSON 自然语言处理 Nacos
垂直和领域 Agent 的护城河:上下文工程
上下文工程是智能体应对复杂任务的核心能力,通过对项目状态、需求文档、团队沟通等多维度信息的结构化整合,提升大模型输出的准确性与适配性。它超越传统提示词工程,构建系统化的信息输入框架,使智能体更贴近人类思维逻辑,成为实现高质量人机协作的关键方法。
927 0
|
弹性计算 运维 安全
阿里云服务器ecs和轻量应用服务器的区别——如何选择比较好?
阿里云ECS与轻量应用服务器对比:ECS适合企业专业场景,功能强大、配置灵活;轻量应用服务器基于ECS简化而来,面向个人开发者,适用于低访问量网站或学习测试,操作简单、成本低。两者在适用人群、使用场景、计费方式、网络带宽等方面各有差异,用户可根据需求选择。如需简易管理与低成本,选轻量应用服务器;追求高性能与复杂业务支持,则云服务器ECS更优。
2200 6
|
网络协议 程序员
为什么TCP需要三次握手?一文讲透!
TCP三次握手是TCP协议建立连接的关键步骤,确保客户端和服务端同步状态并确认彼此的存在。过程分为三步:1) 客户端发送SYN包请求连接;2) 服务端回应SYN/ACK包确认收到并提供初始序列号;3) 客户端发送ACK包确认服务端的序列号,双方进入连接状态。此机制确保了双向通信的可靠性和资源的有效利用,避免了失效请求导致的问题。
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
Java 开发者
深入理解BigDecimal:精度保障的秘诀
【10月更文挑战第29天】
628 5
|
人工智能 自然语言处理 搜索推荐
Jina AI新模型使搜索准确性提升20%
【2月更文挑战第17天】Jina AI新模型使搜索准确性提升20%
699 2
Jina AI新模型使搜索准确性提升20%
|
缓存 Dubbo Java
Dubbo线程模型设计解析
该文章主要介绍了Dubbo线程模型的设计解析,包括Dubbo作为一个支持大量并发请求的网络框架的特点,以及其线程模型的工作原理。