算法打卡day32|贪心算法篇06|Leetcode 738.单调递增的数字、968.监控二叉树

  算法题

Leetcode 738.单调递增的数字

题目链接:738.单调递增的数字

 大佬视频讲解:单调递增的数字视频讲解

 个人思路

这个题目就是从例子中找规律,例如 332,从后往前遍历,32不是单调递增将2变为9,3减1,变成了329,遍历到2,32不是递增,将2变为9,3减1,变成299,符合题目条件,打印输出。

解法
贪心法

这道题只能从后往前遍历,因为如果是从前向后遍历的话,拿例子332看,第一步变成了292,第二步变成了289,并不是真正的结果299。

而从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299;确定了遍历顺序之后,发现局部最优就可以推出全局,可以用贪心 

class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);//int变为字符串char[] chars = s.toCharArray();//转为字符数组int start = s.length();//从后往前遍历 for (int i = s.length() - 2; i >= 0; i--) {if (chars[i] > chars[i + 1]) {//不符合单调递增 chars[i]--;//元素减一start = i+1;//更改需要变为9的位置}}for (int i = start; i < s.length(); i++) {chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));//转为integer类型}
}

时间复杂度:O(n);(遍历字符串中的每个字符)

空间复杂度:O( 1);(无动态使用空间)


 Leetcode  968.监控二叉树

题目链接:968.监控二叉树

大佬视频讲解:监控二叉树视频讲解

个人思路

一整个难住,看看题解...

解法
贪心法

根据题目所给例子,知道摄像头不能安装到叶子节点,因为这样会浪费一层监控空间,所以安装摄像头从下往上考虑,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点.

下往上看,局部最优:让叶子节点的父节点安摄像头,所用摄像头最少,整体最优:全部摄像头数量所用最少!局部最优可以推出全局最优,找不出反例,用贪心

1.确定遍历顺序

二叉树从低向上推导,可以使用后序遍历(左右中)

在遍历时取了左孩子的返回值,右孩子的返回值, 以便推导中间节点的状态

2.隔两个节点放一个摄像头状态分析

每个节点可能有如下三种状态,可以分别有三个数字来表示

  • 该节点无覆盖   -> 0
  • 本节点有摄像头   -> 1
  • 本节点有覆盖   -> 2

为了让摄像头数量最少,先叶子节点的父节点安装摄像头

终止条件:空节点的判断;返回状态值只能是有覆盖(2),否则不满足在叶子节点父节点安装摄像头

单层逻辑处理主要有如下四类情况

情况1:左右节点都有覆盖

左孩子有覆盖,右孩子有覆盖,那么此时中间节点应该就是无覆盖的状态了。

如图:

情况2:左右节点至少有一个无覆盖的情况

如果是以下情况,则中间节点(父节点)应该放摄像头:

  • left == 0 && right == 0 左右节点无覆盖
  • left == 1 && right == 0 左节点有摄像头,右节点无覆盖
  • left == 0 && right == 1 左节点有无覆盖,右节点摄像头
  • left == 0 && right == 2 左节点无覆盖,右节点覆盖
  • left == 2 && right == 0 左节点覆盖,右节点无覆盖

有一个孩子没有覆盖,父节点就应该放摄像头,摄像头的数量要加一,并且return 1,代表中间节点放摄像头。

情况3:左右节点至少有一个有摄像头

如果是以下情况,其实就是 左右孩子节点有一个有摄像头了,那么其父节点就为2(覆盖的状态)

  • left == 1 && right == 2 左节点有摄像头,右节点有覆盖
  • left == 2 && right == 1 左节点有覆盖,右节点有摄像头
  • left == 1 && right == 1 左右节点都有摄像头

情况4:头结点没有覆盖

递归结束之后,可能头结点 还有一个无覆盖的情况,如下图,所以递归结束之后,还要判断根节点,如果没有覆盖,result++

class Solution {int  res=0;public int minCameraCover(TreeNode root) {if(minCame(root)==0){// 情况4:对根节点的状态做检验res++;}return res;}public int minCame(TreeNode root){if(root==null){ // 空节点默认为 有覆盖状态,避免在叶子节点上放摄像头return 2;}int left=minCame(root.left);int  right=minCame(root.right);// 情况1:如果左右节点都覆盖了的话, 那么本节点的状态就应该是无覆盖,没有摄像头if(left==2&&right==2){:return 0;}else if(left==0||right==0){//情况2: 左右节点都是无覆盖状态,那 根节点此时应该放一个摄像头res++;return 1;// 状态值为 1 摄像头数 ++;}else{// 情况3:左右节点至少存在 1个摄像头,那么本节点就是处于被覆盖状态return 2;}}
}

时间复杂度:O(n );(遍历整棵树)

空间复杂度:O(n);(数的高度,最差情况下为n)


 以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

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

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

相关文章

Marin说PCB之电源完整性之电源网络的PDN仿真CST---01

最近朋友圈最火的消息我感觉是除了开封的王婆外莫过于是小米SU7汽车发布这件事情了&#xff0c;小编我也是一位资深的米粉&#xff0c;我在上个月28号的时候守在电脑前直播看小米SU7汽车的发布会&#xff0c;其中雷总演讲的一段话很打动我&#xff1a;不甘于平庸&#xff0c;还…

微信小程序-文字转语音(播放及暂停)

1、使用微信小程序的同声传译功能 小程序平台-设置-第三方设置-插件管理-新增同声传译插件 小程序app.json文件配置 "plugins": {"WechatSI": {"version": "0.3.5","provider": "wx069ba97219f66d99"}},小程序中…

VMware-16.0配置虚拟机网络模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络&#xff1f;二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…

JS-23-原型继承

一、JS的原型继承 在传统的基于Class的语言如Java、C中&#xff0c;继承的本质是扩展一个已有的Class&#xff0c;并生成新的Subclass。 但是&#xff0c;JavaScript由于采用原型继承&#xff0c;根本不存在Class这种类型。 但是办法还是有的。我们先回顾Student构造函数&am…

手机真机连接USB调试adb不识别不显示和TCPIP连接问题

手机真机连接USB调试adb devices不显示设备和TCPIP连接 本文手机型号为NOVA 7 &#xff0c;其他型号手机在开发人员模式打开等方式可能略有不同&#xff0c;需根据自己的手机型号修改。 文章目录 1. 打开和关闭开发者模式2. 真机USB连接调试adb不显示设备问题的若干解决方法3…

前端调试工具之Chrome Elements、Network、Sources、TimeLine调试

常用的调试工具有Chrome浏览器的调试工具&#xff0c;火狐浏览器的Firebug插件调试工具&#xff0c;IE的开发人员工具等。它们的功能与使用方法大致相似。Chrome浏览器简洁快速&#xff0c;功能强大这里主要介绍Chrome浏览器的调试工具。 打开 Google Chrome 浏览器&#xff0c…

Linux(centos) 安装GraalVM

文章目录 版权声明GraalVM 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用&#xff0c;并非商业用途。我在整理学习笔记的过程中尽力确保准确性&…

视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】

视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构&#xff0c;可以在复杂的网络环境中快速、灵活部署&#xff0c;平台视频能力丰富&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…

物联网行业中,我们如何选择数据库?

在当今数字化潮流中&#xff0c;我们面对的不仅是海量数据&#xff0c;更是时间的涟漪。从生产线的传感器到金融市场的交易记录&#xff0c;时间序列数据成为了理解事物演变和趋势的关键。在面对这样庞大而动态的数据流时&#xff0c;我们需要深入了解一种强大的工具——时序数…

素数的判断方法总结

目录 素数介绍 试除法 埃氏筛 欧拉筛 素数介绍 判断一个数n是不是素数&#xff1a;当时&#xff0c;用试除法&#xff1b;当时&#xff0c;试除法不够用&#xff0c;需要用高级算法。 试除法 把内的所有数去试除n&#xff0c;如果都不能整除&#xff0c;就是素数。 boo…

谷粒商城实战(008 缓存)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第151p-第p157的内容 简介 数据库承担落盘&#xff08;持久化&#xff09;工作 拿map做缓存 这种是本地缓存&#xff0c;会有一些问题 分布…

【嵌入式硬件】三极管伏安特性曲线-饱和区

1.三极管伏安特性 三极管工作电路如下图所示。 三极管伏安特性曲线 书本上的描述: 截止区:三极管工作在截止状态,当发射结的电压Ube 小于 导通电压(0.6V-0.7V),发射结没有导通;集电结处于反向偏置,没有放大作用。 放大区:三极管的发射极加正向电压(…

晨控RFID读写器与罗克韦尔PLC可编程逻辑控制器MODBUSTCP通讯说明

晨控RFID读写器与罗克韦尔PLC可编程逻辑控制器MODBUSTCP通讯说明 晨控RFID读写器系列是支持标准工业通讯协议 MODBUSTCP 的读卡器,方便用户集成到PLC等控制系统中。读卡器提供了网络 POE 供电和直流电源供电两种方式&#xff0c;确保用户在使用无 POE 供电功能的交换机时可采用…

vue3中怎么点击按钮就上传文件

<el-button text type"primary" click"importBillExcel(row)">导入账单</el-button> // 导入客户账单Excel表 const importBillExcel (row) > {let input document.createElement(input)input.type fileinput.accept .pdf, .png, .zip…

文本自动粘贴编辑器:支持自动粘贴并筛选手机号码,让信息处理更轻松

在信息时代的浪潮中&#xff0c;文本处理已成为我们日常工作与生活的重要组成部分。无论是商务沟通、社交互动还是个人事务处理&#xff0c;手机号码的筛选与粘贴都显得尤为关键。然而&#xff0c;传统的文本处理方式效率低下、易出错&#xff0c;已无法满足现代人的高效需求。…

Android Studio学习7——常用控件view

Android控件 双击shift键——>搜索想要找的文件 Ctrlshift回车——>补全“&#xff1b;”号 CtrlX——>删除一行&#xff0c;只需把鼠标放在那一行 windows自带字体

Set a Light 3D Studio:探索光影艺术的全新维度mac/win中文版

Set a Light 3D Studio 是一款领先的三维建模和渲染软件&#xff0c;它将设计师、艺术家和摄影师的创意想法转化为生动逼真的三维场景。这款软件以其强大的功能和直观的界面&#xff0c;成为行业内众多专业人士的首 选工具。 set.a.light 3D STUDIO中文版软件获取 在Set a Lig…

【HTML】标签学习(下.4)

&#xff08;Hello&#xff01;大家好哇&#xff0c;今天我们将继续学习HTML的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; &#xff08;续接【HTML】标签学习&#xff08;下.3&#xff09;&#xff09; 3.4.2 <label&g…

nodeJs 实现视频的转换(超详细教程)

前段时间拿到一个视频是4k的&#xff0c;没法播放&#xff0c;于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…

4款在线网页原型图设计软件推荐

与桌面端相比&#xff0c;在线网页原型设计软件的使用具有优势&#xff0c;因为在线网页原型设计软件在整个使用过程中不需要安装&#xff0c;在线网页原型设计软件在任何地方都没有限制。更重要的是&#xff0c;无论是现在使用的 Linux&#xff0c;在线网页原型设计软件在操作…