代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树,总结

题目与题解

参考资料:贪心总结

738.单调递增的数字

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

代码随想录题解:738.单调递增的数字

视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字_哔哩哔哩_bilibili

解题思路:

        一开始想复杂了,赋值的时候就手忙脚乱,看答案了。

看完代码随想录之后的想法 

        其实逻辑非常单纯,依次从数字的末尾开始往高位比较,如果不符合单调递增的原理,就把当前位的数字减一,同时把后面的所有数字都变成9,一定是最大的数。

        为了做起来方便,可以将输入的数字转换为字符数组,这样修改其中每一位数的时候会简单很多。另外,最好从最小位往高位遍历,同时记录要变成9的数字起始位置,方便后续数字的修改。

class Solution {public int monotoneIncreasingDigits(int n) {if (n <= 9) return n;String[] s = (n + "").split("");int flag = s.length;for (int i = s.length - 1; i > 0 ; i--) {if (Integer.parseInt(s[i]) < Integer.parseInt(s[i-1])) {flag = i;s[i-1] = Integer.parseInt(s[i-1]) - 1 + "";}}for (int i = flag; i < s.length; i++) {s[i] = "9";}return Integer.parseInt(String.join("", s));}
}

遇到的困难

        看过思路以后,一开始想用StringBuilder接收n,然后修改其中的参数,但是不知道为什么setCharAt(i)的时候先读取字符再对其进行-1处理数据类型会变成int,也不知道如何变回char,最后还是老老实实用string数组接收n了,java在字符串处理这一块不是特别好用。

968.监控二叉树

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

代码随想录题解:968.监控二叉树

视频讲解:贪心算法,二叉树与贪心的结合,有点难...... LeetCode:968.监督二叉树_哔哩哔哩_bilibili

解题思路:

        从善如流,二刷再说

看完代码随想录之后的想法 

        在此先记录一下,感觉很难写。

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

遇到的困难

        下次

今日收获

        贪心算法到这里正式结束了。贪心算法说白了就是一些常识的模拟,用到了一些贪心的思维,但没有固定的套路,如何找到局部最优,如何判断局部最优是否能构成全局最优,非常依赖数学直觉。尽量把这几道题都做熟吧,以不变应万变。

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

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

相关文章

Docker安装Oracle数据库 【转载】

Docker安装Oracle数据 alter user system identified by abc; --修改system用户的密码

JVM调优工具详解-jps、jmap、jstat、jstack

jps 用于查看相关java线程的相关信息 选项作用-q仅显示进程 ID&#xff0c;而不显示类名或 JAR 文件的路径-m显示传递给主类的参数-l显示完整的主类名或 JAR 文件的路径-v显示传递给 Java 虚拟机的参数 jmap 此命令用来查看内存信息&#xff0c;实例个数以及占内存大小 jmap…

IT技术人员必看:什么是业务?何为业务架构?

在技术型的组织里&#xff0c;好多Leader能脱颖而出&#xff0c;除了得有扎实的技术底子&#xff0c;对业务的熟悉和理解也相当重要。尤其在像阿里那样的公司&#xff0c;P7以上的技术人员要想升职&#xff0c;深度理解业务就特别关键。而且&#xff0c;级别越高&#xff0c;对…

Vue3+Ant Design表格排序

最近在公司做有关报表的项目时&#xff0c;遇到最多的问题-表格排序&#xff0c;刚开始看到UI设计图的时候&#xff0c;还有些纳闷这个排序如何做&#xff0c;其实实际上并没有想象中的那么难&#xff0c;如果说单纯的排序的话ant design这个组件里的表格有自带的排序和筛选功能…

作业第二次

一、正向解析 1、准备工作 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld 2、服务端、客户端均安装软件 [rootserver ~]# yum install bind -y [rootnode1 ~]# yum install bind -y 3、服务端、客户端设置静态ip [rootserver ~]# nmcli c modify …

ocr截图识别的软件有吗?分享6款!

随着科技的发展&#xff0c;我们越来越多地依赖于数字技术和智能工具来处理日常任务。OCR技术就是其中的佼佼者&#xff0c;它能够将图片中的文字快速、准确地转换成可编辑的文本格式。OCR截图识别软件就是这一技术的典型应用&#xff0c;它们能够帮助我们轻松地从截图中提取文…

772. 只出现一次的字符

给你一个只包含小写字母的字符串。 请你判断是否存在只在字符串中出现过一次的字符。 如果存在&#xff0c;则输出满足条件的字符中位置最靠前的那个。 如果没有&#xff0c;输出 no。 输入格式 共一行&#xff0c;包含一个由小写字母构成的字符串。 数据保证字符串的长度…

供应RTC5606H 芯片现货

长期供应各品牌芯片现货&#xff1a; NVP2443I NVP6324 RTC5606H NZ3802-A IRF100B201 IMX290LQR-G STM32F103C8T6TR STM32F103C8T6TR STM32F103CBT7TR TPS3823-33DBVR IMX326 TPS3823-33DBVR LPC55S69**D100 OCP2184QAD DT3001S23E1-30 EMP8734-33…

阿里云服务器带宽价格全解析,附报价单

阿里云服务器公网带宽怎么收费&#xff1f;北京地域服务器按固定带宽计费一个月23元/M&#xff0c;按使用流量计费0.8元/GB&#xff0c;云服务器地域不同实际带宽价格也不同&#xff0c;阿里云服务器网aliyunfuwuqi.com分享不同带宽计费模式下带宽收费价格表&#xff1a; 公网…

【C语言】双向链表详解

文章目录 关于双向链表双向链表的初始化双向链表的打印双向链表方法调用 - 尾删为例双向链表的查找 - 指定位置之后插入为例双向链表结束 - 链表的销毁小结及整体代码实现 关于双向链表 首先链表有8种基本分法 其中在笔者之前文章种详细介绍的 单链表 是不带头单项不循环链表…

sql | 建表语句中default 关键字的使用 | datetime vs timestamp vs bigint

backgroud: 时间戳&#xff0c;存表&#xff0c;好像一般存的是 datime\timestamp\bigint&#xff0c;那有啥区别呢&#xff1f; 搜了一下&#xff0c;貌似&#xff1a; bigint&#xff1a;bigint是一个64位的整数类型&#xff0c;可以用来存储时间戳。但是&#xff0c;它只是…

C++学习知识

C知识小菜单&#xff1a; 备赛蓝桥杯过程中的一些小知识积累&#xff0c;持续更新中&#xff01; 文章目录 C知识小菜单&#xff1a;1.小数取整&#xff1a;2.小数点后保留几位&#xff1a;3.数字占几位字符&#xff1a;4. 求x 的 y 次幂&#xff08;次方&#xff09;5. 求平方…

STM32完成软件I2C通讯

今天的重点是利用STM32的软件方案和MPU60506轴姿态传感器建立通讯&#xff0c;今天只完成了简单的发送地址和接收应答的部分&#xff0c;特此记录一下过程&#xff0c;以后忘记可以随时翻出来看看。 先介绍最基本的I2C通讯的最基本的6个时序&#xff1a; 一&#xff1a;起始条…

TCP/IP协议—UDP

TCP/IP协议—UDP UDP协议UDP通信特点 UDP头部报文UDP检验 UDP协议 用户数据传输协议 (UDP&#xff0c;User Datagram Protocol) 是一种无连接的协议&#xff0c;提供了简单的数据传输服务&#xff0c;不保证数据的顺序以及完整性。应用层很多通信协议都基于UDP进行传输&#x…

算法-二分

算法-二分 时间复杂度&#xff08;logn&#xff09; 当问题的答案具有单调性时&#xff0c;就可以通过二分把求解转换为判定。 1.整数二分 bool check(int x){...} //检查x是否满足某种性质int bsearch_1(int l,int r) {int mid(lr)>>1;int ansr;if(check(mid)) an…

蓝桥杯JAVA组备赛模板2:质素线性筛

线性筛&#xff1a; //质数线性筛int N1000010;int cnt 0;int[] minv new int[N];int[] prime new int[N];minv[1] 1;for(int i 2;i < N;i){if(minv[i] 0)prime[cnt] i;for(int j 1;j < cnt && i * prime[j] < N;j){minv[i * prime[j]] prime[j];if…

关系型数据库设计的核心原则和规范

关系型数据库设计规范旨在减少数据冗余、提高数据一致性&#xff0c;并优化数据访问性能。以下是关系型数据库设计的核心原则和规范&#xff1a; 实体-关系模型 (ER Model) 在设计阶段&#xff0c;首先创建实体-关系图&#xff08;ER Diagram&#xff09;&#xff0c;用于描述业…

centos7的防火墙

一、防火墙的开启、关闭、禁用命令 &#xff08;1&#xff09;设置开机启用防火墙&#xff1a;systemctl enable firewalld.service &#xff08;2&#xff09;设置开机禁用防火墙&#xff1a;systemctl disable firewalld.service &#xff08;3&#xff09;启动防火墙&#x…

未佩戴厨师帽识别检测 厨房管理系统 自动监测未佩戴厨师帽行为 实时报警

在厨房环境中&#xff0c;佩戴厨师帽对于食品安全和卫生至关重要。厨师帽能够有效地防止头发、皮屑等杂质掉入食物中&#xff0c;减少了食品受到污染的可能性&#xff0c;从而保障了食品安全。特别是在学校、餐厅等场景中&#xff0c;对于未佩戴厨师帽的检测更是必不可少。相关…

c++ override关键字

在C11及之后的标准中&#xff0c;override是一个关键字&#xff0c;用于表示派生类中的成员函数覆盖了基类中的虚函数。 使用override关键字的好处在于它提供了一种明确的方式来指示编译器&#xff1a;该函数打算覆盖基类中的虚函数。如果使用了override关键字&#xff0c;但该…