码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法37|738,714,968


    738.单调递增的数字

    1. class Solution:
    2. def monotoneIncreasingDigits(self, n: int) -> int:
    3. #将数字变成列表
    4. ls = [i for i in str(n)]
    5. #范围是到1,因为他还会判断i-1
    6. for i in range(len(ls)-1,0,-1):
    7. if int(ls[i-1]) > int(ls[i]):
    8. ls[i-1] = str(int(ls[i-1])-1)
    9. ls[i:] = '9'*(len(ls)-i)
    10. result = int("".join(ls))
    11. return result

    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

    局部最优:永远都9,前面永远都减1

    全局最优:这样就是最大的。

    遍历这个数字,前面如果比后面大,前面的减一,后面的变成9

    二刷(未ac)

    1. var monotoneIncreasingDigits = function(n) {
    2. let digits = Array.from(String(n),Number)
    3. let flag = Infinity
    4. for(let i = digits.length-1;i>0;i--){
    5. if(digits[i-1]>digits[i]){
    6. flag = i
    7. digits[i-1] = digits[i-1]-1
    8. digits[i] = 9
    9. }
    10. }
    11. for(let i = flag;i<digits.length;i++){
    12. digits[i] = 9
    13. }
    14. let result = digits.join("")
    15. return +result
    16. };

    714. 买卖股票的最佳时机含手续费 (可以跳过)

    贪心解法可以跳过,有点难以理解,即使理解了,后面也会忘,还是在动态规划章节在好好做本题。

    https://programmercarl.com/0714.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA%E5%90%AB%E6%89%8B%E7%BB%AD%E8%B4%B9.html

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

    1. var minCameraCover = function(root) {
    2. // 使用后序遍历,因为我们需要从叶子节点开始。因为下面的节点没有放的话,所少的摄像头比上面的多。所以需要使用后序遍历
    3. // 节点有三个状态:0 未覆盖(没有摄像头,没有监控到) 1 放摄像头 2 覆盖
    4. const traversal = function(node){
    5. // 左右中
    6. // 终止条件
    7. // 因为我们需要保证叶子节点的父节点也需要放上摄像头,如果别的状态,那么叶子节点需要一个摄像头
    8. if(node === null){
    9. return 2
    10. }
    11. // 左
    12. let left = traversal(node.left)
    13. // 右
    14. let right = traversal(node.right)
    15. // 处理逻辑
    16. // 情况1:左右节点都有覆盖
    17. if(left === 2 && right === 2){
    18. return 0
    19. }
    20. // 情况2:左右节点至少有一个无覆盖
    21. // if(left === 0 && right === 0){
    22. // }if(left === 0 && right === 1){
    23. // }if(left === 0 && right === 2){
    24. // }if(left === 1 && right === 0){
    25. // }if(left === 2 && right === 0){
    26. // }
    27. if(left === 0 || right ===0){
    28. result ++
    29. return 1
    30. }
    31. // 情况3:左右节点至少有一个摄像头
    32. if(left === 1||right ===1){
    33. return 2
    34. }
    35. return -1
    36. }
    37. let result = 0
    38. if(traversal(root) === 0){
    39. result ++
    40. }
    41. return result
    42. };

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

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

    总结

    看完了,很困

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

    https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93%E7%AF%87.html

  • 相关阅读:
    《信息学奥赛一本通》 , ZJOI2007 tarjan 最大半联通子图
    【C#】vs2022 .net8
    Red Hat 8 启动没有进入GUI图形界面
    supervisor的使用
    【UCIe】UCIe 相关术语名词缩写释义
    Pytorch入门实战 P07-搭建vgg16模型
    ShareSDK for Flutter
    回溯--组合,排列
    CH341/CH340Linux驱动使用教程
    牛客多校赛2(找规律/根号分块 三维括号dp)
  • 原文地址:https://blog.csdn.net/weixin_42173016/article/details/128141410
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号