news 2026/6/5 14:38:52

【 每天学习一点算法 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/28 22:10:50

樊登读书会合作:讲书内容结构化便于会员学习

樊登读书会合作&#xff1a;讲书内容结构化便于会员学习 在知识付费浪潮席卷的今天&#xff0c;越来越多用户习惯通过音频“听书”来提升自我。樊登读书会正是这一趋势下的佼佼者——它把一本本厚重书籍浓缩成40分钟的口语化解读&#xff0c;帮助会员高效获取认知增量。但问题也…

作者头像 李华
网站建设 2026/6/5 14:45:16

onenote分区管理:讲座录音按章节自动分割

讲座录音如何自动分章并归档到 OneNote&#xff1f;用 Fun-ASR 实现“语音即文档” 在高校研究生的日常里&#xff0c;最头疼的不是读不完的论文&#xff0c;而是听不完的讲座——两小时的学术报告录下来&#xff0c;回放时却要花三倍时间反复拖动进度条找重点。更别提企业培训…

作者头像 李华
网站建设 2026/5/22 18:12:59

reddit帖子创作:语音输入参与热门话题讨论

语音输入如何重塑 Reddit 内容创作&#xff1a;从开口到发帖的智能跃迁 在信息爆炸的时代&#xff0c;表达的速度往往决定了影响力的边界。尤其是在像 Reddit 这样的开放社区中&#xff0c;热门话题的讨论窗口转瞬即逝——你有没有经历过这样的场景&#xff1f;突然灵光一闪&am…

作者头像 李华
网站建设 2026/6/6 5:43:56

荔枝FM创作者激励:上传音频自动附带文字版本

荔枝FM创作者激励&#xff1a;上传音频自动附带文字版本 在内容创作全面迈入多模态时代的今天&#xff0c;音频平台正面临一个看似微小却影响深远的挑战&#xff1a;如何让一段播客、一节课程或一场访谈&#xff0c;不仅“被听见”&#xff0c;还能“被读懂”、“被搜索”、“被…

作者头像 李华
网站建设 2026/5/30 8:07:14

阿里达摩院参考:与自家Paraformer进行性能对比

阿里达摩院语音识别技术选型深度解析&#xff1a;Fun-ASR WebUI 与 Paraformer 的实践对比 在智能办公、远程协作和数字化服务日益普及的今天&#xff0c;语音识别已不再是实验室里的前沿技术&#xff0c;而是企业降本增效的关键工具。无论是会议纪要自动生成&#xff0c;还是客…

作者头像 李华
网站建设 2026/6/4 21:33:07

Packt出版社邀请:撰写《Mastering Fun-ASR》专著

Mastering Fun-ASR&#xff1a;语音智能时代的中文识别新范式 在远程办公常态化、AI原生应用爆发的今天&#xff0c;会议录音转写不准、客服对话提取困难、课堂内容无法复盘——这些看似琐碎的问题&#xff0c;正成为制约企业效率的真实瓶颈。而当大模型浪潮席卷自然语言处理领…

作者头像 李华