213. 打家劫舍 II(JS实现)

【打家劫舍 II】 实现:动态规划 阅读详情

1 题目

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
示例 1:
输入: [2,3,2]
输出: 3
解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
示例 2:
输入: [1,2,3,1]
输出: 4
解释: 你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

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

2 思路

这道题考察动态规划,与打家劫舍一不同的是,这次的房屋围成了一个环状,如果偷了第一家,就一定不能偷最后一家,因此我们考虑将环状拆分为两段,分别为1...n-1和2...n,分别用动态规划计算其能偷到的最大金额,然后两者取最大即可

3代码

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

    const d = [nums[0]];
    const d1 = [0, nums[1]];

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

    for (let i = 2; i<nums.length; i++) {
        if (i === 2) {
            d1[i] = Math.max(nums[1], nums[2]);
        } else {
            d1[i] = Math.max(d1[i-1], d1[i-2] + nums[i]);
        }
    }

    return Math.max(d[d.length - 1], d1[d1.length - 1]);
};
无人驾驶-2024-09-智能驾驶与机器视觉09:视觉与多传感器融合 从本章开始,我们将详细介绍视觉与多传感器融合技术。自动驾驶中常用的传感器都有其优势和局限性,单一传感器无法应对复杂的驾驶场景。多传感器融合技术旨在综合利用不同的传感器优势,提升感知的精度和鲁棒性。本章首先介绍多传感器融合的相关概念,之后详细介绍典型的融合方法。 阅读详情

相关推荐

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 409

js解决打家劫舍

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

乡村中医的博客 562

SAP MTO实战:从销售订单到生产订单的精准触发与配置详解

本文深入解析SAP系统中按订单生产(MTO)模式的核心流程与配置。详细阐述了如何通过精准配置物料主数据策略组、需求类型及计划策略(如策略50),实现从销售订单自动触发生产订单的完整链路。文章结合实战案例,指导用户打通销售与生产环节,并提供了关键事务代码与常见问题排查指南,助力企业实现以销定产,优化库存与成本控制。

weixin_29300931的博客 212

leetCode198. 打家劫舍 简单动态规划 by JavaScript

dp方程:dp[i] = (dp[i - 2] + nums[i]) > dp[i - 1]?根据题目描述,小偷不能偷相邻的两家,先初始化dp前两位。

tangpinger的博客 148

Simlink与PX4硬件在环仿真(HIL)实现

Simlink与PX4硬件在环仿真(HIL)实现 介于涉及的知识比较多,这里只是简单的介绍一下,更多内容可以参考阿木实验室《基于matlab模型开发》课程。 硬件在环HIL介绍 simlink与PX4通信实现 硬件在环HIL介绍 为来贯彻万物都可以用数学公式表示,我们以simlink的角度来看我们的无人机,那么UAV可以分为以下的几个模块: 传感器模型 滤波器模块 控制器模...

Zipout的博客 6210

基于FPGA的数据采集系统(一)

整体系统设计 本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下: 图1:FPGA数据采集系统框图 从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D..

phflovelt的博客 2万+

198. 打家劫舍 --动态规划

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

zjbzwhwhz的博客 728

用AI画电路板AI EDA初探Creating WiFi Radio with CELUS: A Step-by-Step Tutorial 使用CELU.IO创建WiFi收音机:分步教程

结论:整体还不太成熟,所选器件单元是欧美思维,器件选型成本和咱们华强北还是无法比。可以关注迭代,看客就当走马观花就行了;不过里面的单元模块还带有AI提问的这个比较好,值得国内EDA从业者学习。话不多说上正文:本教程目的是让我们深入了解如何使用CELUS设计平台构建WiFi收音机实战项目。本指南的重点是使用该平台来选择正确的解决方案,并整合一个项目,让您可以将音乐和节目从互联网直接传输到您自己构建的扬声器。

2301_81235726的博客 1万+

198. 打家劫舍——中等

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

Lin_Willen的博客 434

行车记录仪 - 碰撞检测

功能需求 行车记录仪的核心功能是记录,大部分时候,行车记录仪都是在循环录制视频和音频,而设备的存储空间是有限的,因此录制机制一般是循环覆盖录制,如此一些重要的记录(例如:发生碰撞时的记录)就可能会被覆盖,为了避免这种情况的发生,行车记录仪设备就需要感知这些情况并做特殊处理(例如:备份相应时刻的录像数据)。 实现原理 碰撞检测是通过物理芯片G-sensor来实现的,加速度发生变化时G-sensor驱动会将加速度上报给应用层,应用层做相应处理。 G-sensor G-sensor(Gravity se

qazw9600的专栏 5216

基于STM32的智能家用节能控制系统设计

该系统可以实时监测家庭的环境参数,如温湿度、光照强度和人体存在情况,根据设定的节能策略自动控制灯光、空调、风扇等家电设备,从而降低不必要的能源消耗。该基于STM32的智能家用节能控制系统通过多种传感器实现了对家庭环境的实时监测,并结合继电器控制模块实现了对家电设备的自动化控制,从而达到节能减排的效果。根据传感器获取的数据,判断是否需要开启或关闭家电设备,从而降低不必要的能源消耗,达到节能的目的。:继电器的控制引脚连接至STM32的GPIO引脚(如PB0、PB1),用于控制灯光、风扇、空调等家电设备的开关。

stm32d1219的博客 1245

198. 打家劫舍(JS实现)

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

zjw_python的博客 502

YOLO环境配置+项目启动全流程(Conda+PyCharm超详解)

YOLO(You Only Look Once)是一个基于深度学习的目标检测算法,广泛应用于智能识别领域。本篇保姆级教学将手把手教你如何从零开始运行一个YOLO项目,适合完全没有基础的新手。

一键难忘的博客 1539

LeetCode213 打家劫舍 II

LeetCode213 打家劫舍 II题目解题 题目 解题 // javascript var rob = function(nums) { const n = nums.length; if (n === 1) return nums[0]; if (n === 2) return Math.max(nums[0], nums[1]); return Math.max(robRange(nums, 0, n - 2), robRange(nums, 1, n - 1

155

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

leetcode:213. 打家劫舍 II

题目来源 leetcode 题目描述 题目解析 动态规划 房子0和房子N-1成为了邻居,不能同时偷。 要么没有偷房子0 要么没有偷房子N-1 我们可以枚举小偷是没有偷房子0还是没有偷房子N-1 情况0:没有偷房子0(相当于把数组的第0个元素去掉):最优策略就是小偷对于房子1-N-1的最优策略—>leetcode:198. 打家劫舍 情况1:没有偷房子N-1(相当于把数组第N-1个元素去掉):最优策略就是小偷对于房子0-N-2的最优策略—>leetcode:198. 打家劫舍 ..

OceanStar的博客 401

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

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

LeetCode题解:213. 打家劫舍 II,动态规划(不缓存偷盗状态),JavaScript,详细注释

原题链接:213. 打家劫舍 II 解题思路: 该题在213. 打家劫舍 II的基础上,将首尾的房屋连接在一起,也就产生了两个场景: 偷了第一户,最后一户不能偷,等同于从第一户偷到倒数第二户。 偷了最后一户,第一户不能偷,等同于从第二户偷到最后一户。 于是我们可以把房屋分成两段分别处理,然后再将得到的结果一起取最大值即可。 状态转移方程分析: 对于第i个房子,有两种场景,偷或不偷: 如果不偷的话,dp[i] = dp[i - 1] + 0 如果偷的话,那么i之前的所有的可能情况,也就是dp

Lee Chen的博客 308

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode灵神算法题库JS(111/200)第六天|213. 打家劫舍 II|64. 最小路径和|494. 目标和|322. 零钱兑换

这道题还是比较典型的,可以记一下DFS 实现慢很多的原因主要是因为它可能会探索大量的重复路径,并且每次递归调用都会增加额外的开销。相比之下,动态规划解决方案通过迭代一次网格来计算最小路径和,从而避免了这些开销。由于之前已经刷过一部分,目前从回溯-子集型开始更新由于之前已经刷过一部分,目前从。

Alicesflower的博客 2208

leetcode:213. 打家劫舍 II

分析 打家劫舍增强版 首尾不能同时抢 因此会有两种情况 1.抢头也就是[0…n - 2] 2.抢尾也就是[1…n - 1] 对两种分别使用打家劫舍的做法即可 ac code class Solution: def rob(self, nums: List[int]) -> int: # 对于[0..n - 1]一头一尾不能同时偷 # 要求在[0..n - 2] 和 [1.. n - 1]中的较大值 n = len(nums) #.

小楼一夜听春雨 354

【力扣刷题总结之213. 打家劫舍 II】

力扣刷题总结之213. 打家劫舍 II

weixin_45349194的博客 154

LeetCode213. 打家劫舍 II

题目: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [2,3,2] 输出:...

qq_38595487的博客 696

213 House Robber II 打家劫舍 II

注意事项: 这是 打家劫舍 的延伸。在上次盗窃完一条街道之后,窃贼又转到了一个新的地方,这样他就不会引起太多注意。这一次,这个地方的所有房屋都围成一圈。这意味着第一个房子是最后一个是紧挨着的。同时,这些房屋的安全系统与上次那条街道的安全系统保持一致。给出一份代表每个房屋存放钱数的非负整数列表,确定你可以在不触动警报的情况下盗取的最高金额。 详见:https://leetcode.com/prob...

weixin_30895603的博客 133

LeetCode 213. 打家劫舍 II

题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例1: 输入: [2,3,2] 输出:...

yj_coder的博客 120

LeetCode题解:213. 打家劫舍 II,动态规划(缓存偷盗状态),JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/house-robber-ii/ 解题思路: 该题在213. 打家劫舍 II的基础上,将首尾的房屋连接在一起,也就产生了两个场景: 偷了第一户,最后一户不能偷,等同于从第一户偷到倒数第二户。 偷了最后一户,第一户不能偷,等同于从第二户偷到最后一户。 于是我们可以把房屋分成两段分别处理,然后再将得到的结果一起取最大值即可。 状态转移方程分析: 对于第i户人家,有偷和不偷两种可能。 如果偷,i - 1户人家只能不偷。 如

Lee Chen的博客 280

【随想录】-【动态规划】213 打家劫舍Ⅱ

同打家劫舍的动规,不过将环断开,考虑两种情况即可。

杨的博客 341

力扣-213. 打家劫舍 II

题目描述:   你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。  给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。 示例: 输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),

weixin_51121209的博客 232

js + leetcode刷题:No.198、213、337打家劫舍三题一文

leetcode198与面试题 17.16. 按摩师一样,而打家劫舍系列共有三道题目,还有两个分别是213, 337 一、198 题目: 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报...

qq_34425377的博客 264
上一篇: 211. 添加与搜索单词 - 数据结构设计(JS实现)
下一篇: 215. 数组中的第K个最大元素(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值