当前位置: 首页 > news >正文

代码随想录算法训练营第三十九天|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),算上递推系统栈的空间

http://www.jsqmd.com/news/712687/

相关文章:

  • DeepSeek V4开源:国产AI的反击
  • Composition-RL:大语言模型强化学习中的组合提示技术
  • Pixel Script Temple 企业级应用:基于大模型的智能客服对话逻辑生成
  • 2026反力臂工厂怎么选,苏州靠谱的制造商有哪些 - myqiye
  • AI绘画提示词工程:从社区宝藏库到个人知识体系构建
  • VibeCoding:用即时反馈与微项目重塑编程入门体验
  • FedU-Net:联邦学习 + BraTS 多模态脑肿瘤分割
  • Gemini-3基准测试实战:性能优化与调优技巧
  • 能满足验收标准的空调安装公司,北京选哪家合适 - myqiye
  • 扩散语言模型中的动态注意力汇聚现象解析
  • HelpingAI-15B:150亿参数情感对话大模型技术解析
  • JAX高性能机器学习框架:原理、实践与优化
  • 多模态大模型工具调用能力的双阶段训练框架解析
  • Promoter-GPT:用大语言模型设计高活性DNA启动子
  • 2026年小程序商城如何上线
  • AI基础设施演进:从支撑系统到创新核心
  • Nordic nRF54LM20A无线MCU:高性能物联网设备的核心选择
  • 【第24期】2026年4月27日 AI日报
  • CLI与MCP对比:命令行与图形界面的运维效率之争
  • gte-base-zh向量数据库集成:Milvus+gte-base-zh构建实时语义检索系统
  • 计算机毕业设计 | SpringBoot+vue学生网上请假系统 高校教务管理系统(附源码+论文+开题报告)
  • Windows + VSCode + CMake 编译
  • AI安全评估:从黑盒到白盒的深度实践
  • Avey-B架构:高效双向编码器的创新设计与应用
  • 基于MCP协议构建日本UX设计AI助手:从原理到实践
  • 全球化出行回暖,为什么要升级护照识别能力
  • 实战:如何提高网站排名?提升20%转化率的内部链接搭建公式
  • 终极指南:MAA明日方舟助手 - 一键解放双手的智能游戏伴侣
  • Avey-B架构:无注意力机制的高效双向编码器解析
  • 注意力机制在LLM推理中的核心作用与优化策略