每日一题:打家劫舍(C++)

2023-11-09

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

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

示例 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.如果只有一间房,只能偷窃这一个房子,最大金额为改偷窃金额。
2.如果有二间房,因为不能偷相邻的两间房,所以只能偷这两间房中金额较大的房间。
3.如果房间数大于2呢(K > 2)
⑴ 偷窃第K个房间,就不能偷窃K - 1 的房间,能偷窃的总金额为 前K - 2的最大金额 与 第K个房间之和。
⑵ 不偷窃第K个房间,那么总金额就为前 K - 1 个房间的最大总金额。

总金额为这两项的较大那个值。states[i] = max(states[i - 1], states[i - 2] + nums[i]);

时间复杂度为O(n),空间复杂度为O(n)。

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if(n == 0)
            return 0;
        if(n == 1)
            return nums[0];
        
        vector<int> states = vector<int> (n,0);
        states[0] = nums[0];
        states[1] = max(nums[0], nums[1]);
        for(int i = 2; i < n; ++i)
        {
            states[i] = max(states[i - 1], states[i - 2] + nums[i]);
        }
        return states[n - 1];
    }
};

优化 动态规划 + 滚动数组
1.first 为 偷第K个房间,能偷窃的总金额为 前K - 2的最大金额 与 第K个房间之和。
2.second 为 不偷第K个房间,前 K - 1 个房间最大金额。
时间复杂度为O(n),空间复杂度为O(1)。

class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if(n == 0)
            return 0;
        if(n == 1)
            return nums[0];
        
        vector<int> states = vector<int> (n,0);
        int first = nums[0];
        int second = max(nums[0], nums[1]);
        for(int i = 2; i < n; ++i)
        {
            int temp = second;
            second  = max(second, first + nums[i]);
            first= temp;
        }
        return second;
    }
};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每日一题:打家劫舍(C++) 的相关文章

  • 通过 VLA 数组跳转到 goto 时出现分段错误

    以下示例演示了该问题 include
  • HttpResponseMessage 的内容为 JSON

    我有一个 ASP NET MVC WEB API 由于多种原因 由于没有授权而重定向 我不能只使用一个简单的对象并在我的控制器方法中返回它 因此我需要 HttpResponseMessage 类来允许我重定向 目前我正在这样做 var re
  • 当“”可以分配给std::string时,为什么有“clear”方法?

    一个可以用string clear函数清空字符串 也可以使用空双引号 来执行此操作 有什么不同 当您分配一个空字符串时 编译器必须在数据部分存储一个空的 C 字符串 并创建代码以将指向它的指针传递给赋值运算符 然后 赋值运算符必须从数据部分
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • 对相当大的整数的大集合的操作的快速实现

    描述 我实现了以下类 LabSetInt64 参见下面的代码 这里的目标是尽可能快地操作大量大整数 最多 10M 的值 我的主要要求集中在 至关重要 尽快获取集合的大小 基数 重要 能够非常快速地迭代一组集合 所以 从下面的实现开始 我还有
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 一些涉及类析构函数和删除运算符的内存管理问题?

    在阅读了一些教程后 我仍然不清楚 C 中内存管理的一些观点 1 当使用 new 运算符声明的类超出范围时 是否会调用其析构函数并释放内存 是否有必要调用删除运算符来释放类的内存并调用其析构函数 class Test void newTest
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • Global.asax 错误处理程序或自定义 IHttpModule 错误处理程序未捕获未处理的异常

    我有一个类 DPCal EventMove 的一种方法 我想限制使用角色的访问 我有一个 Global asax cs 错误处理程序和一个自定义 IHttpModule 错误处理程序 旨在捕获未处理的异常 并将它们 Server Trans
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • C# 记录类型:记录子类之间的相等比较

    给定父记录类型 public record Foo string Value 和两个记录子类Bar and Bee我想知道是否可以实施Equals在基类中 因此 Foo Bar 或 Bee 的实例都被考虑equal基于Value 两者都与E
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • 为什么 32 位 .NET 进程的引用类型的最小大小为 12 字节

    我正在读专业 Net 性能 https rads stackoverflow com amzn click com 1430244585本书有关参考类型内部结构的部分 它提到 对于 32 位 net 进程 引用类型具有 4 字节的对象头和

随机推荐

  • 2020 mse 清华_【清华大学】清华大学2020届推免生入围名单汇总

    我把能找到的清华入围名单 进入复试名单 都给大家发一下 做一个资料备份 尤其是有些系所的名单有本科学校 这可是非常珍贵的分析资料 首先给我的现在专业 招生简章 清华大学经济管理学院 http masters sem tsinghua edu
  • pop服务器未响应,servlet测试控制台无反应啊??求大神帮忙,

    String path request getContextPath String basePath request getScheme request getServerName request getServerPort path gt
  • 几种用户相似度计算方法及其优缺点

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 进行用户协同过滤时 一个关键问题是如何计算用户之间的相似性 比较常见的计算用户相似度的算法有余弦相似性 皮尔森系数 调整余弦相似性三种 这三种相似性都是基于一个称为用户 项
  • Dos常用命令及解释大全

    目录 前言 一 系统信息 二 网络 三 用户 四 端口进程服务 五 共享 六 文件操作 总结 前言 DOS是 磁盘操作系统 Disk Operating System 的缩写 它是一种早期的操作系统 最初在20世纪80年代广泛用于个人计算机
  • 完成U-net细胞分割的一些准备

    使用本地上传文件 from google colab import files uploaded files upload for fn in uploaded keys print User uploaded file name with
  • vue3中的Suspense组件

    用法 插槽名字固定 形成一个异步组件 比如这边 如果我们像之前那样进行静态引入的话 比如 child组件迟迟没有加载完毕 那么整个app vue组件也不会出现 而是要等到child加载完毕了之后再一起出现 而使用了defineAsyncCo
  • Python画图之浪漫樱花

    import turtle as T import random import time 画樱花的躯干 60 t def Tree branch t time sleep 0 0005 if branch gt 3 if 8 lt bran
  • 真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式!

    两行css如下 列间距 可有可无 默认30px column gap 0 效果图如下 说明 不存在一边列表过长问题 很均匀 没有缺点 2019年1月12日 我用的chrome 版本 70 0 3538 102 正式版本 64 位 以上代码没
  • C语言:LeetCode第一题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 示例 给定 nums 2 7 11 1
  • newlab平台stm32总结

    详细资源包下载 点击此处 一 GPIO的输出 1 时钟设置 2 调用初始化函数 3 输出函数 1 GPIO WriteBit 端口 引脚 BitAction 0 低 GPIO WriteBit 端口 引脚 BitAction 1 高 2 G
  • pytest单元测试框架详解+Pytest+Allure环境的搭建

    参考 https blog csdn net liuchunming033 category 3193659 html 一 Pytest简介 pytest是python的一种单元测试框架 与python自带的unittest测试框架类似 但
  • PPTP - GRE

    PPTP Point to Point Tunneling Protocol 点对点隧道协议 GRE Generic Routing Encapsulation 通用路由封装 PPTP 的连接过程如下图 PPTP 可以用于在 IP 网络上建
  • [译]人脸检测与人脸识别简介

    From http www shervinemami co cc faceRecognition html Translated by 11 人脸识别 是一个在计算机视觉和生物特征识别领域十分活跃的话题 这个主题已经被给力地研究了25年 并
  • 海康威视网络摄像机远程监控配置(DDNS)

    http wzy02 blog 163 com blog static 300006082013111911918426 海康威视网络摄像机远程监控配置 海康威视网络摄像机出厂的默认IP地址 为192 0 0 64 需要将IPC的IP地址设
  • 从零开始一起学习SLAM(9)不推公式,如何真正理解对极约束?

    文章目录 对极几何基本概念 如何得到极线方程 作业 此文发于公众号 计算机视觉life 原文链接 从零开始一起学习SLAM 不推公式 如何真正理解对极约束 自从小白向师兄学习了李群李代数和相机成像模型的基本原理后 感觉书上的内容没那么难了
  • MyBatis实现In查询

    文章目录 一 SQL语法实现In查询 二 MyBatis实现In查询 1 Dao层方法的参数只有一个 2 Dao层方法的参数有多个 2 1 使用 Param xxx 实现 2 2 使用Map实现 参考资料 一 SQL语法实现In查询 SQL
  • 小学计算机的一些课题,小学信息技术课题申报题目参考

    小学信息技术课题申报题目参考 分类 课题研究 发表时间 2019 12 12 14 02 小学信息技术课题申报时 课题组织方通常会给予课题指南 亦或者选题范围 需要申报者根据自身的擅长领域以及实际工作遇到的问题 来确定研究的选题 以下是 小
  • unity之代码修改Shader参数值

    代码修改Shader参数 Shader 源代码下载 Unity 每次版本更新的时候 不单单会更新 Unity 配套的资源也是会一块更新 的 比如版本配套的 Shader 源代码 一 下载步骤 1 打开unity官网将纵向滑动条拉倒最底部点击
  • 转载:count(*)和count(1)的区别

    原始链接 https blog csdn net weixin 43980049 article details 89327782 count 和count 1 的区别是什么 weixin 43980049 2019 04 16 10 42
  • 每日一题:打家劫舍(C++)

    题目描述 你是一个专业的小偷 计划偷窃沿街的房屋 每间房内都藏有一定的现金 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统 如果两间相邻的房屋在同一晚上被小偷闯入 系统会自动报警 给定一个代表每个房屋存放金额的非负整数数组 计