码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 代码随想录算法训练营第三十七天|738.单调递增的数字 968.监控二叉树 总结


     738.单调递增的数字 

    代码随想录

    例如: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
     

    1. public int monotoneIncreasingDigits(int n) {
    2. String s = String.valueOf(n);
    3. char[] chars = s.toCharArray();
    4. int start = s.length();
    5. for (int i = s.length() - 2; i >= 0; i--) {
    6. if (chars[i] > chars[i + 1]) {
    7. chars[i]--;
    8. start = i+1;
    9. }
    10. }
    11. for (int i = start; i < s.length(); i++) {
    12. chars[i] = '9';
    13. }
    14. return Integer.parseInt(String.valueOf(chars));
    15. }

     968.监控二叉树 (可以跳过)

    本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。 

    代码随想录

     总结 

    可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。 

    代码随想录

    贪心简单题

    以下三道题目就是简单题,大家会发现贪心感觉就是常识。是的,如下三道题目,就是靠常识,但我都具体分析了局部最优是什么,全局最优是什么,贪心也要贪的有理有据!

    • 贪心算法:分发饼干(opens new window)
    • 贪心算法:K次取反后最大化的数组和(opens new window)
    • 贪心算法:柠檬水找零(opens new window)

    #贪心中等题

    贪心中等题,靠常识可能就有点想不出来了。开始初现贪心算法的难度与巧妙之处。

    • 贪心算法:摆动序列(opens new window)
    • 贪心算法:单调递增的数字(opens new window)

    #贪心解决股票问题

    大家都知道股票系列问题是动规的专长,其实用贪心也可以解决,而且还不止就这两道题目,但这两道比较典型,我就拿来单独说一说

    • 贪心算法:买卖股票的最佳时机II(opens new window)
    • 贪心算法:买卖股票的最佳时机含手续费 (opens new window)本题使用贪心算法比较绕,建议后面学习动态规划章节的时候,理解动规就好

    #两个维度权衡问题

    在出现两个维度相互影响的情况时,两边一起考虑一定会顾此失彼,要先确定一个维度,再确定另一个一个维度。

    • 贪心算法:分发糖果(opens new window)
    • 贪心算法:根据身高重建队列(opens new window)

    在讲解本题的过程中,还强调了编程语言的重要性,模拟插队的时候,使用C++中的list(链表)替代了vector(动态数组),效率会高很多。

    所以在贪心算法:根据身高重建队列(续集) (opens new window)详细讲解了,为什么用list(链表)更快!

    贪心难题

    这里的题目如果没有接触过,其实是很难想到的,甚至接触过,也一时想不出来,所以题目不要做一遍,要多练!

    #贪心解决区间问题

    关于区间问题,大家应该印象深刻,有一周我们专门讲解的区间问题,各种覆盖各种去重。

    • 贪心算法:跳跃游戏(opens new window)
    • 贪心算法:跳跃游戏II(opens new window)
    • 贪心算法:用最少数量的箭引爆气球(opens new window)
    • 贪心算法:无重叠区间(opens new window)
    • 贪心算法:划分字母区间(opens new window)
    • 贪心算法:合并区间(opens new window)

    #其他难题

    贪心算法:最大子序和 (opens new window)其实是动态规划的题目,但贪心性能更优,很多同学也是第一次发现贪心能比动规更优的题目。

    贪心算法:加油站 (opens new window)可能以为是一道模拟题,但就算模拟其实也不简单,需要把while用的很娴熟。但其实是可以使用贪心给时间复杂度降低一个数量级。

    最后贪心系列压轴题目贪心算法:我要监控二叉树! (opens new window),不仅贪心的思路不好想,而且需要对二叉树的操作特别娴熟,这就是典型的交叉类难题了。

  • 相关阅读:
    QT+OSG/osgEarth编译之五十:osgTerrain+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5工具库osgTerrain)
    网页添加灰色滤镜
    把Open Folder as PyCharm Project添加到右键菜单打开文件夹
    MySQL8中的开窗函数
    java 基础巩固20
    redis修改配置文件配置密码开启远程访问后台运行
    Linux与Shell学习--shell系列12--流程控制5(case ... esac循环)
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    Baklib|SaaS产品,实现企业流程数字化
    影像组学提取特征,图像标签尺寸不一致
  • 原文地址:https://blog.csdn.net/a20010616/article/details/132950858
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号