news 2026/4/23 13:01:18

【 每天学习一点算法 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/4/21 21:55:02

百度研究院分析:ERNIE-SAT是否面临新竞争者?

百度研究院分析&#xff1a;ERNIE-SAT是否面临新竞争者&#xff1f; 在智能语音技术加速落地的今天&#xff0c;企业对语音识别系统的需求早已不再局限于“能用”——而是要求更轻、更快、更私密、更易集成。传统依赖云端API的大模型方案虽精度高&#xff0c;却常因延迟、成本和…

作者头像 李华
网站建设 2026/4/10 17:44:39

ModbusSlave使用教程:从机功能码处理通俗解释

Modbus从机实战指南&#xff1a;功能码处理的“人话”解析你有没有遇到过这种情况&#xff1f;设备接上RS485总线&#xff0c;主机一发读寄存器命令&#xff0c;返回的数据却是乱码&#xff1b;或者写入参数后毫无反应&#xff0c;查遍线路也没问题。最后发现——不是硬件故障&…

作者头像 李华
网站建设 2026/4/23 12:48:17

GPU租赁广告植入:在Fun-ASR文档页推广算力服务

GPU租赁广告植入&#xff1a;在Fun-ASR文档页推广算力服务 在语音识别技术正加速渗透进会议记录、在线教育、智能客服等日常场景的今天&#xff0c;一个现实问题摆在了开发者面前&#xff1a;为什么本地部署的ASR系统总是“卡”得不行&#xff1f;明明模型已经开源&#xff0c;…

作者头像 李华
网站建设 2026/4/23 13:01:10

arm64-v8a在高端智能手机中的应用实战案例

arm64-v8a如何重塑高端手机的性能边界&#xff1f;从骁龙到A17 Pro的实战解析你有没有想过&#xff0c;为什么现在的旗舰手机能流畅运行《原神》这种“硬件杀手”级游戏&#xff0c;还能一边实时翻译语音、一边处理AI滤镜、后台录音剪辑4K视频——而不会立刻烫手关机&#xff1…

作者头像 李华
网站建设 2026/4/18 7:43:18

金山文档协作:边说边记,多人协同编辑更高效

金山文档协作&#xff1a;边说边记&#xff0c;多人协同编辑更高效 在一场跨时区的远程会议中&#xff0c;团队成员各执一词&#xff0c;讨论激烈。传统做法是安排专人速记&#xff0c;会后整理成文——但总有人抱怨“我说的那句关键建议没被记下来”。有没有可能让每个人的声…

作者头像 李华
网站建设 2026/4/17 1:26:49

PCBA差分信号布线技巧:高速电路实战案例

高速PCBA差分布线实战&#xff1a;从原理到落地&#xff0c;一文讲透信号完整性核心你有没有遇到过这样的情况&#xff1f;板子用的是最新的FPGA&#xff0c;内存是高速DDR4&#xff0c;接口也全上了PCIe Gen3——硬件配置拉满&#xff0c;结果上电一测&#xff0c;眼图闭合、误…

作者头像 李华