【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</code"><!--=-->
  • 0 <= nums[i] <="400</code"><!--=-->

思路:

  • 动态规划
  • 状态转移:用 f[i][2]的第一维表示第 i个位置,第二维用 0&#x3001;1表示第 i个位置是否选择。
    i个位置有两种情况:
    (1)不选第 i个位置,即 f[i][0]f[i][0]可以由 f[i - 1][0]转移而来,因为不选第 i个位置,所以也可以由 f[i - 1][1]转移而来。因为当前位置不选,所以最高金额依然是上一个状态的最高金额。即: f[i][0] = max(f[i - 1][0], f[i - 1][1])
    (2)选第 i个位置,即 f[i][1]。因为要选择第 i个位置,根据题意不能选择两个连续的位置,那么 f[i][1]就不能由 f[i - 1][1]转移而来,只能由 f[i - 1][0]转移而来。因为要选择当前位置,所以最高金额是上一个状态的最高金额加上当前位置的金额,即: f[i][1] = f[i - 1][0] + nums[i - 1]

code:

class Solution {
public:
    int rob(vector<int>& nums) {
        int N = nums.size(), INF = 0x3f3f3f3f;
        int f[N + 10][2];

        // &#x521D;&#x59CB;&#x5316;&#x865A;&#x62DF;&#x8282;&#x70B9;
        f[0][0] = 0, f[0][1] = -INF;

        // &#x9009;&#x6216;&#x8005;&#x4E0D;&#x9009;&#x7B2C;i&#x4E2A;&#x4F4D;&#x7F6E;
        for (int i = 1; i <= n; i ++){ f[i][0]="max(f[i" - 1][0], f[i 1][1]); f[i][1]="f[i" 1][0] + nums[i 1]; } return max(f[n][0], f[n][1]); }; < code></=></int>

Original: https://www.cnblogs.com/Timesi/p/16671105.html
Author: 顾北清
Title: 【Leetcode】198. 打家劫舍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578199/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python:给定一个不超过5位的正整数,判断有几位

    方法一:作比较 方法二:使用整除实现,除完后如果是个0或不是个0,这种方法引入了计算,效率会降低,所以能加就不要减,能乘就不要除,能不计算就不计算 方法三: 方法四:字符串处理实现…

    Linux 2023年6月7日
    089
  • samba服务设置与访问共享文件夹

    samba服务设置与访问共享文件夹 linux设置文件夹共享 windows连接共享文件夹(运行->//IP/route) linux连接共享文件夹 1、基本服务安装与配置 …

    Linux 2023年5月27日
    095
  • 【原创】Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)

    背景 Read the fucking source code! –By 鲁迅 A picture is worth a thousand words. –…

    Linux 2023年6月8日
    075
  • 函数指针的重要用途——回调函数

    什么是回调函数? 粗暴的说,如果一个函数作为另一个函数的参数传入,这种函数就可以称为回调函数(这句话并不严谨,但为了说明问题可以这么理解)。C语言里面,一般就是一个函数的参数列表中…

    Linux 2023年6月8日
    093
  • 终于知道 Shell 中单引号双引号的区别了

    在编写 shell 脚本或输入命令时,你可能已经注意到大多数命令都可以使用单引号 或双引号, 这不仅适用于 shell 脚本,而且适用于所有 Bash 命令, 但是两种类型的引号以…

    Linux 2023年6月13日
    076
  • [Python]批量替换PPT字体脚本

    使用说明 脚本代码 配置文件 使用说明 将脚本放置在需要批量修改的PPT文件夹根目录 修改配置文件 conf.ini 中的字体 执行脚本文件 ​ exe文件 下载:https://…

    Linux 2023年6月13日
    0115
  • 【证券从业】金融基础知识-第三章 证券市场主体02

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-03 02:14 陈景中 阅读…

    Linux 2023年6月13日
    092
  • 对抗攻击方法BIM与PGD的区别

    Basic iterative method(BIM):论文地址 笔记地址 Projected gradient descent(PGD):论文地址 笔记地址 区别1 来自于:ht…

    Linux 2023年6月7日
    087
  • 没学习的恐惧

    已经三个月没有接触新知识,每次上线之后就有一些bug,觉得自己作为一个点点点的测试很失败。我很迷茫,我都不知道自己一天是如何过的,反正就觉得时间过的很快,而且发现什么事都没做一天就…

    Linux 2023年6月8日
    087
  • 如你所见

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月6日
    067
  • ASP.NET Web API实现POST报文的构造与推送

    毕设和OAuth协议相关,而要理解OAuth协议就必须理解HTTP GET/POST方法。因此研究了一下如何使用Web API或MVC构造POST报文并实现客户端与服务器端的交互。…

    Linux 2023年6月13日
    087
  • ssh远程连接服务(二)三台虚拟机之间的免密登录

    创建三台虚拟机主机名分别为node01、node02、node03 在node01虚拟机上生成密钥对 然后将生成的公钥分别复制到node02、node03的虚拟机上(前提三台虚拟机…

    Linux 2023年6月7日
    095
  • 深入理解Java类加载机制,再也不用死记硬背了

    谈谈”会”的三个层次 在《说透分布式事务》中,我举例里说明了会与会的差别。对一门语言的学习,这里谈谈我理解的”会”的三个层次: 第一…

    Linux 2023年6月14日
    093
  • centos 7 安装zabbix 4.0

    一、zabbix简介 1、简介 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数如:…

    Linux 2023年6月7日
    0104
  • angular报错:Cannot assign to a reference or variable

    错误代码: <input #manufacturerId="ngModel" id="manufacturerId" name=&qu…

    Linux 2023年6月7日
    093
  • Redis是如何实现高性能的?

    Redis到底有多快? redis到底有多快,可以通过 redis-benchmark 脚本进行基准测试。redis官方的性能基准测试报告 Redis为什么这么快? redis之所…

    Linux 2023年6月7日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球