news 2026/4/28 7:12:37

代码随想录算法训练营第三十九天|LeetCode 198 打家劫舍、LeetCode 213 打家劫舍 ||、LeetCode 337 打家劫舍 |||

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第三十九天|LeetCode 198 打家劫舍、LeetCode 213 打家劫舍 ||、LeetCode 337 打家劫舍 |||

参考文章均来自代码随想录

LeetCode 198 打家劫舍

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

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

示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 2: 输入:[2,7,9,3,1] 输出:12 解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
  1. dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。
  2. 决定dp[i]的因素就是第i房间偷还是不偷。如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房,(注意这里是考虑,并不是一定要偷i-1)然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
  3. dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(nums[0], nums[1]);
  4. dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历
classSolution{public:introb(vector<int>&nums){if(nums.size()==0)return0;if(nums.size()==1)returnnums[0];vector<int>dp(nums.size()+1,0);dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);for(inti=2;i<nums.size();i++){dp[i]=max(dp[i-2]+nums[i],dp[i-1]);}returndp[nums.asize()-1];}};

时间复杂度: O(n)
空间复杂度: O(n)


LeetCode 213 打家劫舍 ||

参考文章链接

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

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

示例 1: 输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。 示例 2: 输入:nums = [1,2,3,1] 输出:4 解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 3: 输入:nums = [1,2,3] 输出:3

成环后有三种情况:
情况一是首尾都不考虑
情况二是只考虑首
情况三是只考虑尾

而情况二和情况三包含情况一
情况三虽然是考虑包含尾元素,但不一定要选尾部元素
所以求情况二和情况三后取最大值即可 每个情况都是打家劫舍的流程

classSolution{public:introbRange(vector<int>&nums,intstart,intend){if(end==start)returnnums[start];vector<int>dp(nums.size());dp[start]=nums[start];dp[start+1]=max(nums[start],nums[start+1]);for(inti=start+2;i<=end;i++){dp[i]=max(dp[i-2]+nums[i],dp[i-1]);}returndp[end];}introb(vector<int>&nums){if(nums.size()==0)return0;if(nums.size()==1)returnnums[0];intresult1=robRange(nums,0,nums.size()-2);// 情况二intresult2=robRange(nums,1,nums.size()-1);// 情况三returnmax(result1,result2);}};

时间复杂度: O(n)
空间复杂度: O(n)


LeetCode 337 打家劫舍 |||

参考文章链接

力扣题目链接

本题属于树形dp 之前没做过 详看参考文章 讲的很清楚
后面再多做一做理解一下

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), * right(right) {} * }; */classSolution{public:introb(TreeNode*root){vector<int>result=robTree(root);returnmax(result[0],result[1]);}// 长度为2的数组,0:不偷,1:偷vector<int>robTree(TreeNode*cur){if(cur==NULL)returnvector<int>{0,0};vector<int>left=robTree(cur->left);vector<int>right=robTree(cur->right);// 偷cur,那么就不能偷左右节点。intval1=cur->val+left[0]+right[0];// 不偷cur,那么可以偷也可以不偷左右节点,则取较大的情况intval2=max(left[0],left[1])+max(right[0],right[1]);return{val2,val1};}};

时间复杂度:O(n),每个节点只遍历了一次
空间复杂度:O(log n),算上递推系统栈的空间

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

AI模型安全评估实战:多维度构建与行业解决方案

1. 项目概述 AI模型安全评估这个领域最近两年突然火了起来&#xff0c;但真正能说清楚该怎么做的团队其实不多。去年我们团队接手了一个金融行业的AI安全评估项目&#xff0c;客户要求我们对他们的信贷审批模型做全面"体检"&#xff0c;那次经历让我深刻认识到&#…

作者头像 李华
网站建设 2026/4/28 7:07:59

全球化出行回暖,为什么要升级护照识别能力

跨境旅游、商务出行、留学交流持续复苏&#xff0c;涉外证件办理与核验量显著增长。对酒店、旅行社、航空公司、银行、会展中心等机构来说&#xff0c;护照信息处理能力&#xff0c;直接关系到服务效率、客户体验与合规风险。过去靠人工应付小流量尚可&#xff0c;如今高峰期日…

作者头像 李华
网站建设 2026/4/28 7:02:22

470-510MHz频段无线通信系统设计与CC1100E+CC1190方案优化

1. 470-510MHz频段无线通信系统设计挑战在工业自动化和物联网应用中&#xff0c;470-510MHz频段因其良好的传播特性成为热门选择。这个频段属于中国短距离设备(SRD)管制范围&#xff0c;最大允许输出功率为17dBm&#xff08;50mW&#xff09;。实际部署中&#xff0c;工程师常面…

作者头像 李华
网站建设 2026/4/28 6:59:27

详解CN域名注册:流程、要求、材料及注意事项全解析

CN域名作为中国国家顶级域名&#xff0c;凭借其本土标识和稳定性能&#xff0c;成为深耕国内市场的首选。注册受CNNIC严格监管&#xff0c;遵循规范流程至关重要。本文国科云将系统梳理cn域名注册全流程、核心要求及关键注意事项。一、CN域名注册核心流程CN域名注册遵循“先申请…

作者头像 李华
网站建设 2026/4/28 6:58:24

大语言模型压缩:稀疏字典学习技术CoSpaDi解析

1. 项目概述在自然语言处理领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的规模不断扩大&#xff0c;带来了显著的性能提升&#xff0c;但同时也面临着存储和计算资源的巨大挑战。传统的低秩近似方法&#xff08;如SVD&#xff09;虽然计算高效&#xff0c;但在处理异…

作者头像 李华