长沙网站建设做得好的效果型网站建设
2026/2/18 22:29:39 网站建设 项目流程
长沙网站建设做得好的,效果型网站建设,wordpress二维码用户登录,备案域名是什么意思每天学习一点算法 2026/01/04 题目#xff1a;打家劫舍 你是一个专业的小偷#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入#…每天学习一点算法 2026/01/04题目打家劫舍你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组计算你 不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。新年新开始坚持学习算法。又是一道动态规划的问题我们来分析一下我们入按照数组顺序的挨个计算在每个房间的能偷窃到的最高金额会有哪些情况呢很明显每个房间就只存在两种情况偷/不偷那我们来逐个房间分析并将每个偷与不偷能窃到的最大金额用一个二维数组存储起来。第一个房间两种可能0或者nums[0]arr[0] [0, nums[0]]第二个房间两种可能如果这个房间不偷那就是截至上一个房间偷到的最高金额因为这是第二房间所以一定是nums[0]如果这个房间偷那肯定是上一个房间未偷盗情况下的金额 这个房间的金额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.length1)returnnums[0]// 如果只有一个房间直接返回letarr[[0,nums[0]]]// 二维数组存储房间最高金额情况 [未盗窃, 已盗窃][]// 循环计算每个房间的情况for(leti1;inums.length;i){arr.push([Math.max(arr[i-1][0],arr[i-1][1]),arr[i-1][0]nums[i]])}// 返回最后一个房间的最大金额constlastarr.pop()returnMath.max(last[0],last[1])};我们可以看到每次循环都只用到了前一个房间的数据所以我们可以考虑不用数组而是用两个变量来存储上一个房间的值。functionrob(nums:number[]):number{if(nums.length1)returnnums[0]// 如果只有一个房间直接返回letpreMaxnums[0]// 存储上一个房间能够偷窃到的最高金额letpreNo0// 存储未偷盗情况下的最高金额// 循环计算每个房间的情况for(leti1;inums.length;i){constpreDopreNonums[i]// 当前房间已偷盗preNopreMax// 当前房间未偷盗为上一个房间的最大值preMaxMath.max(preNo,preDo)// 当前房间最大值为 当前房间未偷盗和已偷盗的最大值}// 返回最后一个房间的最大金额returnpreMax};题目来源力扣LeetCode

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询