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

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

738.单调递增的数字

贪心算法

题目要求小于等于N的最大单调递增的整数,那么拿一个两位的数字来举例。

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

这一点如果想清楚了,这道题就好办了。

此时是从前向后遍历还是从后向前遍历呢?

从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。

这么说有点抽象,举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。

那么从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299

确定了遍历顺序之后,那么此时局部最优就可以推出全局,找不出反例,试试贪心。

  • 时间复杂度:O(n),n 为数字长度
  • 空间复杂度:O(n),需要一个字符串,转化为字符串操作更方便

总结

本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。

想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。

最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。

class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);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;}}for(int i = start; i < s.length();i++){chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));}
}

968.监控二叉树

总结

http://www.lryc.cn/news/58964.html

相关文章:

  • 【Linux】线程中的互斥锁、条件变量、信号量(数据安全问题、生产消费模型、阻塞队列和环形队列的实现)
  • MySQL8.0的安装和配置
  • LinuxGUI自动化测试框架搭建(三)-虚拟机安装(Hyper-V或者VMWare)
  • 改进YOLO系列:数据增强扩充(有增强图像和标注),包含copypaste、翻转、cutout等八种增强方式
  • c++11 标准模板(STL)(std::stack)(一)
  • C++-c语言词法分析器
  • Maven工具复习
  • 算法总结-深度优先遍历和广度优先遍历
  • 【Linux】Centos安装mvn命令(maven)
  • 驱动保护 -- 通过PID保护指定进程
  • spring常用注解(全)
  • Axios请求(对于ajax的二次封装)——Axios请求的响应结构、默认配置
  • (三)【软件设计师】计算机系统—CPU习题联系
  • win下配置pytorch3d
  • JS字符串对象
  • Linux系统对文件及目录的权限管理(chmod、chown)
  • 半透明反向代理 (基于策略路由)
  • 课前测5-超级密码
  • QML控件--Menu
  • 002:Mapbox GL更改大气、空间及星星状态
  • 2022年第十三届蓝桥杯题解(全)C/C++
  • 【cmake学习】find_package 详解
  • WEB攻防-通用漏洞PHP反序列化POP链构造魔术方法原生类
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK里的图像处理库进行图像转换(C++)
  • JD开放平台接口(获得JD商品详情, 按关键字搜索商品,按图搜索京东商品(拍立淘), 获得店铺的所有商品,获取推荐商品列表, 获取购买到的商品订单列表)
  • 上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨
  • C/C++ 玩转StoneValley库:从入门到精通
  • CentOS7-部署Tomcat并运行Jpress
  • 菜鸟程序员的3年心酸逆袭之旅!今天你对我爱搭不理,明天我让你高攀不起!
  • 【Scala】异常 隐式转换 泛型