news 2026/5/8 18:35:00

【 每天学习一点算法 2026/01/04】打家劫舍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【 每天学习一点算法 2026/01/04】打家劫舍

每天学习一点算法 2026/01/04

题目:打家劫舍

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

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

新年新开始,坚持学习算法。

又是一道动态规划的问题,我们来分析一下,我们入按照数组顺序的挨个计算在每个房间的能偷窃到的最高金额会有哪些情况呢?很明显,每个房间就只存在两种情况(偷/不偷),那我们来逐个房间分析,并将每个偷与不偷能窃到的最大金额用一个二维数组存储起来。

  • 第一个房间:两种可能0或者nums[0]arr[0] = [0, nums[0]]

  • 第二个房间:两种可能

    1. 如果这个房间不偷那就是截至上一个房间偷到的最高金额(因为这是第二房间所以一定是nums[0]
    2. 如果这个房间偷,那肯定是上一个房间未偷盗情况下的金额 + 这个房间的金额

    arr[1] = [nums[0], arr[0][0] + nums[1]]

  • 第 n 个房间:根据第二房间的分析我们可以知道,如果这个房间为偷取,我们应该拿到上一个能够偷窃到的最高金额(Math.max(arr[n - 1][0], arr[n - 1][1])),所以arr[n] = [Math.max(arr[n - 1][0], arr[n - 1][1]), arr[n - 1][0] + nums[n]]

这样我们就成功找到了房间能够偷窃到的最高金额的规律

functionrob(nums:number[]):number{if(nums.length===1)returnnums[0]// 如果只有一个房间直接返回letarr=[[0,nums[0]]]// 二维数组存储房间最高金额情况 [未盗窃, 已盗窃][]// 循环计算每个房间的情况for(leti=1;i<nums.length;i++){arr.push([Math.max(arr[i-1][0],arr[i-1][1]),arr[i-1][0]+nums[i]])}// 返回最后一个房间的最大金额constlast=arr.pop()returnMath.max(last[0],last[1])};

我们可以看到每次循环都只用到了前一个房间的数据,所以我们可以考虑不用数组而是用两个变量来存储上一个房间的值。

functionrob(nums:number[]):number{if(nums.length===1)returnnums[0]// 如果只有一个房间直接返回letpreMax=nums[0]// 存储上一个房间能够偷窃到的最高金额letpreNo=0// 存储未偷盗情况下的最高金额// 循环计算每个房间的情况for(leti=1;i<nums.length;i++){constpreDo=preNo+nums[i]// 当前房间已偷盗preNo=preMax// 当前房间未偷盗为上一个房间的最大值preMax=Math.max(preNo,preDo)// 当前房间最大值为 当前房间未偷盗和已偷盗的最大值}// 返回最后一个房间的最大金额returnpreMax};

题目来源:力扣(LeetCode)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 9:35:35

一文说清UDS NRC在ECU通信中的错误处理逻辑

UDS通信中NRC的真相&#xff1a;从错误码到智能诊断的跃迁你有没有遇到过这样的场景&#xff1f;在产线刷写ECU固件时&#xff0c;上位机突然弹出一个7F 27 33——安全访问被拒绝。售后维修终端读取故障码失败&#xff0c;返回7F 19 22——条件不满足。OTA升级流程卡住&#xf…

作者头像 李华
网站建设 2026/5/7 12:15:58

一文说清数字电路实验基础:核心要点快速理解

数字电路实验从入门到精通&#xff1a;新手避坑指南与实战心法你有没有过这样的经历&#xff1f;明明逻辑图背得滚瓜烂熟&#xff0c;真到了面包板前接线时却手忙脚乱&#xff1b;芯片插上去没反应&#xff0c;LED不亮、计数器卡死&#xff0c;查了半小时万用表也没找出问题在哪…

作者头像 李华
网站建设 2026/5/8 3:29:58

python,食指操作翻页

<<< 向左挥动: 后退 <<< 向左挥动: 后退 <<< 向左挥动: 后退 向右挥动: 前进 <<< 向左挥动: 后退 <<< 向左挥动: 后退 <<< 向左挥动: 后退 <<< 向左挥动: 后退 <<< 向左挥动: 后退 向右挥动: 前进 向…

作者头像 李华
网站建设 2026/4/18 5:39:56

哈尔滨工业大学毕业设计:多位同学选择Fun-ASR课题

哈尔滨工业大学毕业设计&#xff1a;多位同学选择Fun-ASR课题 在人工智能技术深度渗透各行各业的今天&#xff0c;语音识别早已不再是实验室里的概念&#xff0c;而是实实在在落地于智能客服、会议纪要生成、无障碍通信等日常场景中的关键能力。尤其随着大模型技术的突破&#…

作者头像 李华
网站建设 2026/5/5 9:47:31

同或门与异或门硬件结构对比分析深度剖析

同或门与异或门&#xff1a;从晶体管到系统设计的深度对话你有没有在写Verilog时&#xff0c;下意识地敲出assign Y ~(A ^ B);然后突然停顿——等等&#xff0c;这个逻辑明明是“相等判断”&#xff0c;为什么没有一个原生的 XNOR 单元直接可用&#xff1f;为什么综合工具有时…

作者头像 李华
网站建设 2026/5/3 18:17:24

PCB布线超详细版教程:涵盖电源、信号与地线处理

PCB布线实战全解&#xff1a;电源、信号与地线的黄金法则你有没有遇到过这样的情况&#xff1f;电路原理图设计得毫无瑕疵&#xff0c;元器件选型也堪称完美&#xff0c;可一到实际测试阶段——系统莫名重启、ADC采样噪声飙升、高速接口频繁丢包……最后排查数天才发现&#xf…

作者头像 李华