代码随想录算法训练营第32天—贪心算法06 | ● *738.单调递增的数字 ● *968.监控二叉树 ● 总结

本文主要是介绍代码随想录算法训练营第32天—贪心算法06 | ● *738.单调递增的数字 ● *968.监控二叉树 ● 总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*738.单调递增的数字

https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html

  • 考点
    • 贪心算法
  • 我的思路
    • 暴力解法
  • 视频讲解关键点总结
    • 几个关键点
    • 一,如果当前数位小于上一数位,如87,则应直接将上一数位减1,当前数位设为9,如79,因为这是满足题意的最大结果
    • 二,如果直接在循环过程中进行上述修改操作,将会在某些情况下发生遗漏,如1000将被修改为900而不是999,1323将被修改为1293而不是1299;因此,应在循环过程中仅将不满足要求的上一数位减1,而记录最靠前的那个需要改为9的数位,并在循环之后将该数位之后全部改为9(这样才满足递增的要求)
  • 我的思路的问题
    • 时间复杂度超限
  • 代码书写问题
    • 直接修改字符串变量是不允许的,因此可以采用切片之后相加的方式生成新字符串
  • 可执行代码
class Solution:def monotoneIncreasingDigits(self, n: int) -> int:n = str(n)index = len(n)for i in range(len(n) - 1, 0, -1):if int(n[i]) < int(n[i - 1]):index = in = n[:i - 1] + str(int(n[i - 1]) - 1) + n[i:]n = n[:index] + ('9' * (len(n) - index))return int(n)

*968.监控二叉树

https://programmercarl.com/0968.%E7%9B%91%E6%8E%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html

  • 考点
    • 贪心算法
    • 二叉树
  • 我的思路
    • 无思路
  • 视频讲解关键点总结
    • 关键点如下:
    • 一、怎么放摄像头?应从底向上放(对应二叉树的后序遍历),因为从叶子节点向上遍历才能尽可能利用摄像头的上下覆盖特性,如果从根节点开始,由于根节点数目远少于叶子节点,其所使用的摄像头数目将超过从下向上遍历
    • 二、怎么判断当前节点是否要放摄像头?利用子节点传上来的状态进行判断
      • 状态0,子节点没有被摄像头覆盖
      • 状态1,子节点有摄像头
      • 状态2,子节点被摄像头覆盖
      • 若两个子节点均被摄像头覆盖,则当前节点应返回状态0
      • 若两个子节点有至少其一没有被覆盖,则当前节点应返回状态1,同时结果计数加1
      • 若两个子节点有至少其一有摄像头,则当前节点应返回状态2
    • 三、如果找到了空节点,应该将其设置为什么状态?空节点应设置为状态2,这样当前节点才会返回状态0
    • 四、按照如上思路遍历完二叉树后,根节点有可能没有被摄像头覆盖,此时应判断二叉树的递归遍历函数返回值是否为0(即根节点为状态0),如果是,则应结果计数加1
  • 我的思路的问题
    • 无思路
  • 代码书写问题
    • 这里的结果变量不能直接定义一个整型变量,因为整型变量在python里为不可变类型,因此在递归遍历时对其进行的修改并没有改变原始变量的值,而是在递归函数里创建了一个新的局部变量,所以使用列表这种可变类型来进行代替
  • 可执行代码
class Solution:def traversal(self, root, result):if root is None:return 2condition1 = self.traversal(root.left, result)condition2 = self.traversal(root.right, result)if condition1 == 2 and condition2 == 2:return 0elif condition2 == 0 or condition1 == 0:result[0] += 1return 1elif condition2 == 1 or condition1 == 1:return 2def minCameraCover(self, root: Optional[TreeNode]) -> int:result = [0]if self.traversal(root, result) == 0:result[0] += 1return result[0]

贪心算法总结

贪心算法总结

这篇关于代码随想录算法训练营第32天—贪心算法06 | ● *738.单调递增的数字 ● *968.监控二叉树 ● 总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/778603

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型