代码随想录Day 41|Leetcode|Python|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍

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

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

解题思路:

确定dp数组含义:dp[i]遍历到房屋index为i时所能打劫到的最多钱

确认递推公式:dp[i]取决于前一个房屋和前两个房屋是否有被偷,如果前一个被偷,则不能偷第i个,如果第i-2个被偷,可选择是否偷第i个。dp[i] = max(dp[i-2]+nums[i], dp[i-1])

初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1])

遍历顺序:从小到大遍历

打印dp数组

class Solution:def rob(self, nums: List[int]) -> int:if len(nums)<=1:return nums[0]dp = [0]*(len(nums))dp[0] = nums[0]dp[1] = max(nums[0], nums[1])for i in range(2, len(nums)):dp[i] = max(dp[i-2]+nums[i], dp[i-1])return dp[len(nums)-1]

 213.打家劫舍II

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

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

解题思路:

本题与上一题区别在于环形数组和直线数组,环形数组首尾不能同时取值,因此分为三种情况:

  1. 不考虑首尾的数组
  2. 不考虑尾部的数组
  3. 不考虑首部的数组

可以发现2, 3包含情况一,因此只需要在2,3中取最大值即可。

dp五步骤:

确定dp数组含义:dp[i]遍历到房屋index为i时所能打劫到的最多钱

确认递推公式:dp[i]取决于前一个房屋和前两个房屋是否有被偷,如果前一个被偷,则不能偷第i个,如果第i-2个被偷,可选择是否偷第i个。dp[i] = max(dp[i-2]+nums[i], dp[i-1])

初始化:dp[0] = nums[0], dp[1] = max(nums[0], nums[1])

遍历顺序:从小到大遍历

打印dp数组

class Solution:def rob(self, nums: List[int]) -> int:if len(nums)<=1:return nums[0]def helper(subnums):if len(subnums)<=1:return subnums[0]dp = [0]*len(subnums)dp[0] = subnums[0]dp[1] = max(subnums[0], subnums[1])for i in range(2, len(subnums)):dp[i] = max(dp[i-2]+subnums[i], dp[i-1])print(dp)return dp[len(subnums)-1]return max(helper(nums[:-1]), helper(nums[1:]))

 337.打家劫舍III

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

示例 1:

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

解题思路:

本体使用递归三部曲结合dp五步骤,设置dp[0],dp[1]表示打劫当前节点和不打劫当前节点的最大值,每个node有一组对应的dp[0], dp[1]。使用后序遍历,当前节点dp值需要结合其左右节点dp进行分析。 递归三步骤:确定递归参数,确定停止条件,递归逻辑。输入参数统一为当前节点即表示为root, 当root == null停止并返回0,再遍历左右子树,中间值取最大dp值。

重点理解

val1 = root.val + leftdp[0] + rightdp[0]#行窃root

val2 = max(leftdp[0],leftdp[1])+max(rightdp[0], rightdp[1])#不行窃root,选取左右子树行窃或不行窃时的最大值,两边取max。

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def rob(self, root: Optional[TreeNode]) -> int:def helper(root):if not root:return [0,0]leftdp = helper(root.left)rightdp = helper(root.right)val1 = root.val + leftdp[0] + rightdp[0]#行窃rootval2 = max(leftdp[0],leftdp[1])+max(rightdp[0], rightdp[1])#不行窃rootreturn [val2, val1]return max(helper(root))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/322086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux上go项目打包与部署

1.第一步把项目打包 1.确保本地goland的操作系统为linux go env找到GOOS如果为window就修改为Linux 修改命令为 go env -w GOOSlinux2.打包 在项目根目录下输入 go build main.go然后项目根目录下会出现一个mian的二进制文件 3.上传包 将 main 程序包放到服务的目录下&…

python与java用途区别有哪些

区别&#xff1a; 1.Python比Java简单&#xff0c;学习成本低&#xff0c;开发效率高。 2.Java运行效率高于Python&#xff0c;尤其是纯Python开发的程序&#xff0c;效率极低。 3.Java相关资料多&#xff0c;尤其是中文资料。 4.Java版本比较稳定&#xff0c;Python2和3不…

全双工音频对讲模块-支持空中升级、多级无线中继

SA618F30是一款高集成的大功率全双工无线音频模块&#xff0c;发射功率高达32dBm。该音频模块简化接口&#xff0c;只需外接音频功放或麦克风即可作为一个小型对讲机&#xff0c;方便快捷嵌入到各类手持设备中。支持多级无线中继&#xff0c;支持OTA空中升级。 SA618F30配备1W…

Flutter笔记:Widgets Easier组件库(11)- 使用提示吐丝(Tip Toasts)

Flutter笔记 Widgets Easier组件库&#xff08;11&#xff09;使用提示吐丝 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this …

LearnOpenGL(九)之材质

一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。在opengl中&#xff0c;我们可以针对每种表面定义不同的材质(Material)属性来模…

电子商务对应的职业有哪些?10年互联网人透底行业秘密!

电子商务对应的职业有哪些&#xff1f;10年互联网人透底行业秘密&#xff01; 事实说话&#xff0c;实事求是&#xff0c;不要再把美颜滤镜下的市场&#xff0c;传给新人小伙伴了&#xff01; 大家好&#xff0c;我是微三云胡佳东&#xff0c;一家软件公司负责人&#xff01; …

五一 作业

#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…

十分钟掌握Java集合之List接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

风格迁移——CAP-VSTNet训练自己数据集并推理测试(详细图文教程)

目录 一、CAP-VSTNet二、源码包准备三、环境准备四、数据集准备4.1 源码包中数据集4.2 动漫风格数据集4.3 MS_COCO数据集 五、训练5.1 训练配置参数修改5.2 开始训练5.2.1 训练真实感模型5.2.2 训练艺术感感模型 5.3 训练过程5.4 模型输出保存 六、测试6.1 单帧图片测试6.1.1 测…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

数字工厂管理系统如何实现生产过程透明化

随着科技的飞速发展&#xff0c;数字化转型已成为制造业不可逆转的趋势。数字工厂管理系统作为实现生产自动化、智能化的重要工具&#xff0c;其在提升生产效率、降低运营成本、优化资源配置等方面的作用日益凸显。其中&#xff0c;实现生产过程的透明化是数字工厂管理系统的重…

HTML Audio标签src使用base64字符

源码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Audio src base64</title> </head> <body><audio controls><source src"data:audio/mp3;base64,//OIxAAAAAAAAAA…

嵌入式linux学习第三天汇编语言点灯

嵌入式linux学习第三天汇编语言点灯 今天学习如何在linux板子上点灯。 I.MX6U GPIO 详解 我们发现I.MX6U GPIO是分为两类的&#xff0c;&#xff1a;SNVS 域的和通用的。在讨论i.MX6U或类似的复杂微处理器时&#xff0c;了解其GPIO&#xff08;通用输入输出&#xff09;引脚…

IoTDB 入门教程 基础篇③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序&#xff1a;https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载&#xff1a;https://archive.…

【软考高项】三十六、资源管理6个过程

一、规划资源管理 1、定义、作用 定义&#xff1a;定义如何估算、获取、管理和利用团队以及实物资源的过程作用&#xff1a;根据项目类型和复杂程度确定适用于项目资源的管理方法和管理程度 2、输入 项目管理计划 质量管理计划、范围基准项目章程 项目文件 需求文件…

ComStar系统架构介绍

中国外汇交易中心为适应市场需要&#xff0c;开发推出了ComStar外汇资金交易管理系统&#xff0c;该系统能够快速响应市场变化及监管机构的新要求&#xff0c;通过与交易中心银行间市场的外汇交易系统无缝连接&#xff0c;为市场成员提供了更为高效、便利、安全稳定的外汇资金业…

项目管理-项目绩效域2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 八大绩效域包括&#xff1a;“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…

Unity 性能优化之光照优化(七)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、测试目的一、实时光源是什么&#xff1f;二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…

学习软考----数据库系统工程师25

关系规范化 1NF&#xff08;第一范式&#xff09; 2NF&#xff08;第二范式&#xff09; 3NF&#xff08;第三范式&#xff09; BCNF&#xff08;巴克斯范式&#xff09; 4NF&#xff08;第四范式&#xff09; 总结

【vue+el-upload】当action=“#“,代表不使用默认上传,使用自定义上传,http-request获取文件流

el-upload有多种上传行为&#xff1a; 1、立即上传&#xff1a; 当 action 属性被赋予一个有效的 URL 时&#xff0c;一旦用户选择了文件&#xff0c;el-upload 组件会立即自动将文件上传到指定的服务器地址。 2、不立即上传&#xff08;自定义触发&#xff09;&#xff1a; 如…