198. 打家劫舍(JS实现)

【打家劫舍】 我们定义一个dp数组,dp[i] 的含义是,在 0 ~ i 间屋子中偷盗,小偷所能获得的最大金额。因此,小偷如果偷了第 i 间,那么必然不能偷第 i + 1间,可以选择偷或不偷第 i + 2间。上面这种后发状态取决于前面状态的,很容易就想到使用动态规划来求解。如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 阅读详情

1 题目

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 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 。

链接:https://leetcode-cn.com/problems/house-robber

2 思路

这道题思路就是动态规划,状态转移方程 d[i] = Math.max(d[i-2] + nums[i], d[i-1]), d[i]为第i个房屋时最大利润

3代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var rob = function(nums) {
    if (nums.length === 0) return 0;
    if (nums.length === 1) return nums[0];

    let d = [nums[0]];

    for (let i=1; i<nums.length; i++) {
        d[i] = Math.max(d[i-1], i - 2 >= 0 ? d[i-2] + nums[i] : nums[i]);
    }

    return d[nums.length - 1];
};
LeetCode——198. 打家劫舍 目录题目1.链接2.题目描述3.解题思路4.题解 题目 1.链接 198. 打家劫舍. 2.题目描述 3.解题思路 动态规划 首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。 如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?对于第 k (k>2) 间房屋,有两个选项: 偷窃第 k 间房屋,那么就不能偷窃第k−1 间房屋,偷窃总金 阅读详情

相关推荐

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

2025年五一数学建模竞赛 A题:基于历史数据与模式识别的道路车流量推测模型研究

Magnolia_He的博客 3783

198. 打家劫舍——中等

一、题目 你是一个专业的小偷,计划偷窃沿街的房屋。 每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。

Lin_Willen的博客 434

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

js解决打家劫舍

关于初始化就更简单了,推导公式涉及了两项那就手动初始化两项即可,第一项是nums[0],第二项考虑第一项取与不取的问题,第一项取第二项就是第一项的结果,第一项不取就是nums[1]那么首先来看如何推导,既然两个元素不能相邻那么可以n-2项加上当前元素,这是取自己的情况,那么不取的情况就是n-1项的结果了,最后取最大值即可(动态规划惯用手段)打家劫舍在面试中经常会遇到,题目的主要意思是给你一个数组,从里面取元素,相邻的不能取,求最大值。接下来题目变成了,数组变成一个二叉树相邻二叉树不能取。

乡村中医的博客 562

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

避开命令行!在VMware vCenter 8.0图形化界面里搞定SSL证书续期全流程

本文详细介绍了在VMware vCenter 8.0图形化界面中完成SSL证书续期的全流程,包括计算机SSL证书、VMCA根证书和STS证书的管理。通过可视化操作,管理员无需使用命令行即可高效处理证书问题,确保vSphere环境的稳定运行。文章还提供了证书监控与预警配置的实用技巧,帮助用户提前规避证书过期风险。

weixin_27051161的博客 282

leetcode打家劫舍(动态规划,python3)

题目 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例1 输入: [1,2,3,1] 输出: 4 解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 ...

Fire_Pot的博客 343

国产FPGA逆袭!深度评测复旦微RFVU3P5G核心板在相控阵雷达中的表现

本文深度评测了复旦微RFVU3P5G核心板在相控阵雷达中的实战表现。该核心板凭借射频直采架构、高采样率ADC/DAC及丰富的DSP资源,在多通道同步精度、动态范围及系统稳定性等关键指标上表现出色,展现了国产FPGA在高端雷达应用中的硬核实力与供应链自主价值。

b0c1d2的博客 723

【算法训练】动态规划 打家劫舍系列 python javascript

js代码主要是为了练手,所以算法逻辑和python是一模一样的 一、打家劫舍 198 1、分析 标准动态规划 每个房子只有两个状态,抢或者不抢。有一个约束条件,相邻房子不能同时抢。所以可以得到如下的动态转移方程 dp[i] = max(dp[i-1],dp[i-2]+nums[i]) 为了编程方便,我们从尾向前计算,所以动态转移方程为 dp[i] = max(dp[i+1],dp[i+2]+nums[i]) 具体见代码 2、代码 python class Solution: def rob.

GUANYX的博客 1981

项目回顾一:《高速多端口共享缓存模块》

本帖子仅为了回顾一下一年前自己动手完成的第一个数字ic设计项目的历程,为复试做一下准备,完成的这个sramc模块花了整整四个月的时间,从0到12个模块的代码产出以及模块的验证,虽然没有拿奖,也没有进入复赛,设计过程中使用的技术手段和算法也不太成熟,但这这是一个值得记录的过程!

weixin_60261760的博客 1254

出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法

Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

码农研究僧的博客 1万+

JS算法之动态规划

❝ 如果不能避免被剥削的命运,就要提高自己被剥削的价值。 ❞ 大家好,我是「柒八九」。 今天,我们继续探索JS算法相关的知识点。我们来谈谈关于「动态规划」的相关知识点和具体的算法。 如果,想了解其他数据结构的算法介绍,可以参考我们已经发布的文章。如下是算法系列的往期文章。 文章list 整数常规排序算法数组字符串链表栈队列二叉树回溯法 好了,天不早了,干点正事哇。 你能所学到的知识点 ❝ 动态规划基础知识单序列问题双序列问题矩阵路径问题背包问题 ❞ 动态规划基础知识 运用动态规划解决问题的第一步是识

weixin_52884694的博客 1999

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

JavaScript实现 - LeetCode刷题 -【打家劫舍】- 第 198 题 !!!

题目: LeetCode题目链接 题目截图: 解题步骤: 符合动态规划的思想 1.定义子问题:f(k) = max(f(k-2) + Ak, f(k-1)) f(k):从前k个房屋中能偷窃到的最大数额 Ak:第k个房屋的钱数,不是A乘k,A只是一个符号 2.反复执行:从2循环到n,执行上述公式 代码: /** * @param {number[]} nums * @return {number} */ var rob = function (nums) { // 第一种方式 //

帅帅邬同学的博客 281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode 198. 打家劫舍:动态规划入门经典题详解

本文详细解析了LeetCode 198题"打家劫舍"的动态规划解法。通过定义dp[i]表示前i+1间房屋的最高偷窃金额,推导出递推公式dp[i] = max(dp[i-2]+nums[i], dp[i-1]),并给出了边界初始化方法。文章包含代码实现、测试案例验证,并提出了空间优化方案,将复杂度从O(n)降至O(1)。这道题帮助理解动态规划的核心思维:状态定义、递推关系和边界处理,是解决"选或不选"类问题的经典范例。

2401_86788218的博客 278

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Leetcode 198. 打家劫舍 (Day 28) JavaScript

【代码】Leetcode 198. 打家劫舍 (Day 28) JavaScript。

Loving CS ~ 46

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

198. 打家劫舍

198. 打家劫舍

底层码农 6236

leetcode198---打家劫舍

leetcode198—打家劫舍原题链接 题目简述 输入: nums []int,非负整数数组; 操作: 取不相邻的一些元素使和最大; 输出: max int, 最大的和 解法分析 动态规划 dp[i]: 选上nums[i]能获得的最大收益; 边界条件: dp[0]=nums[0]; dp[1]=nums[1]; dp[2]=nums[0]+nums[2]; 状态转移方程: dp[i...

Again的博客 191

【Java】【JS】LeetCode - 动态规划 - # 198 打家劫舍

所有的大人都曾经是小孩。 力扣力扣https://leetcode-cn.com/problems/house-robber/ # 198 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 输入: [1,2,3,1] 输出: 4 解释:...

Sabrina_cc的博客 278

LeetCode - 198 - 打家劫舍(house-robber)

Create by jsliang on 2019-07-08 19:12:26Recently revised in 2019-7-8 22:06:01一 目录不折腾的...

weixin_41806099的博客 735

LeetCode198——打家劫舍

我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/house-robber/description/ 题目描述: 知识点:动态规划 思路一:动态规划I 状态定义: f(x) -------- 考虑偷取[0, x]范围内的房子。 状态转移: f(x) ...

清风阁 1014

js leetcode 198 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。   偷窃到的最高金额 = 1 + 3 = 4 。 示例 2: 输

change_fate的博客 200

【leetcode题解js】198.打家劫舍

【leetcode】198.打家劫舍题目思路代码复杂度 题目 leetcode原题链接 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额

laplacepoisson的博客 183

leetcode(js)-每日一练之 打家劫舍 题库编号198

leetcode(js)-每日一练之 打家劫舍 又是一道动态规划的题 用memo[i]储存i角标的位置偷窃的最大值 var rob = function(nums) { if(nums.length===0) { return 0; }; if(nums.length===1) { return nums[0] }; const memo = []; memo[0] = nums[0]; memo[1]

qq_25503949的博客 222

js.打家劫舍

每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。从第三个值开始,arr数组的每一个值为arr[i-2] + nums[i]和arr[i-1]的最大值。先求出前两个的值,第一个值为nums[0],第二个值为nums[0]和nums[1]的最大值。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。,一夜之内能够偷窃到的最高金额。

露西西⭐的博客 452

LeetCode 198. 打家劫舍

方法一:简单搜索(超出内存限制) 对于每一家i,选择抢或不抢,若不抢,则可对i+1进行选择;若抢,则对i+2进行选择 class Solution { public: int rob(vector<int>& nums) { if(nums.size()==0) return 0;//空集特判 return rec(nums,0); ...

weixin_44413191的博客 261
上一篇: 190. 颠倒二进制位(JS实现)
下一篇: 199. 二叉树的右视图(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值