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

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

56. 合并区间

题目链接:https://leetcode.cn/problems/merge-intervals/
文档讲解:https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html
视频讲解:https://www.bilibili.com/video/BV1wx4y157nD

思路

  • 将当前区间跟结果集中的最后一个区间比较。

代码

class Solution {public int[][] merge(int[][] intervals) {if (intervals.length == 0) return intervals;List<int[]> list = new ArrayList<>();Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));list.add(intervals[0]); // 先把第一个区间放进去for (int i = 1; i < intervals.length; i++) {if (intervals[i][0] <= list.getLast()[1]) {int start = list.getLast()[0];int end = Math.max(list.getLast()[1], intervals[i][1]);list.removeLast();list.add(new int[]{start, end});} else list.add(intervals[i]);}return list.toArray(new int[list.size()][]);}
}

分析:时间复杂度:O(nlogn),空间复杂度:O(n)。

738.单调递增的数字

题目链接:https://leetcode.cn/problems/monotone-increasing-digits/
文档讲解:https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5…
视频讲解:https://www.bilibili.com/video/BV1Kv4y1x7tP

思路

  • 当遇到前一位比后一位小的时候,将前一位减一,后一位取最大值9。从后往前遍历。
  • 比如:332中先比较32,变为329,接着处理前面的32,变为299
  • 定义一个参数flag,用于记录从哪个数开始后面都置为9。如果遇到前一位比后一位小的情况就直接变成9,那么在处理1000的时候,就会处理成900,而不是999。

代码

class Solution {public int monotoneIncreasingDigits(int n) {String s = Integer.toString(n); // 先转换为Stringint flag = s.length();char[] c = s.toCharArray(); // 由于String中的值不能改,所以再转换为char数组for (int i = s.length() - 1; i > 0; i--) {if (c[i - 1] > c[i]) {c[i - 1] -= 1;flag = i;}}for (int i = flag; i < s.length(); i++) {c[i] = '9';}return Integer.parseInt(String.valueOf(c)); // 先转换为String,然后转为int}
}

分析:时间复杂度:O(n),空间复杂度:O(n)。

968.监控二叉树

题目链接:https://leetcode.cn/problems/binary-tree-cameras/
文档讲解:https://programmercarl.com/0968.%E7%9B%91%E6%8E%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV1SA411U75i

思路

  • 二叉树叶子结点众多,所以我们要在叶子结点节约摄像头,即优先从叶子结点的父节点放摄像头,然后往上推。
  • 使用后序遍历,往上传递摄像头数量。
  • 定义节点的三个状态。0:无覆盖。1:有摄像头。2:有覆盖。遇到空节点返回状态2。
  • 四种情况:1、左右孩子都有覆盖,则父节点无覆盖。2、左右孩子至少有一个无覆盖,则父节点为摄像头。3、左右孩子至少有一个有摄像头,则父节点有覆盖。4、最后遍历完根节点无覆盖,则给根节点加摄像头。

代码

class Solution {int res = 0;public int minCameraCover(TreeNode root) {if (traversal(root) == 0) { // 情况4、最后遍历完根节点无覆盖,则给根节点加摄像头res++;}return res;}public int traversal(TreeNode node) {// 三个状态:0:无覆盖 1:有摄像头 2:有覆盖 if (node == null) return 2; // 给空节点状态置为2int left = traversal(node.left); // 左int right = traversal(node.right); // 右// 中if (left == 2 && right == 2) { // 情况1、左右孩子都有覆盖,则父节点无覆盖return 0;}if (left == 0 || right == 0) { // 情况2、左右孩子至少有一个无覆盖,则父节点为摄像头res++;return 1;}if (left == 1 || right == 1) { // 情况3、左右孩子至少有一个有摄像头,则父节点有覆盖return 2;}return -1; // 随便返回,实际不会走到这里来}
}

贪心部分总结

文档讲解:https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93%E7%AF…

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于某评论的TF-IDF下的LDA主题模型分析
  • 2813. 子序列最大优雅度 Hard
  • 在线的、完全免费的、提供回放的技术传播方面的大会:Adobe DITA World 2024
  • 利用python爬虫采集苹果公司各产品销售收入统计报告
  • Git操作指南
  • tmega128单片机控制的智能小车设计
  • Dubbo源码解析-mock原理
  • Redis常见异常及优化方案
  • python面试题2:lambda是什么?有什么优点?(难度--简单)
  • SQL中distinct去重关键字的使用和count统计组合的使用
  • 17.路由配置与页面创建
  • 【vue-8】记事本案例
  • Java进阶工具: BigInteger, BigDecimal, 正则表达式 Arrays 实战指南
  • ai智能机器人让呼叫中心工作更轻松
  • 音视频主要概念
  • 《Java编程思想》读书笔记-对象导论
  • 【剑指offer】让抽象问题具体化
  • ES6--对象的扩展
  • IDEA 插件开发入门教程
  • JavaScript新鲜事·第5期
  • JS 面试题总结
  • PHP的Ev教程三(Periodic watcher)
  • Vue ES6 Jade Scss Webpack Gulp
  • Zsh 开发指南(第十四篇 文件读写)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 批量截取pdf文件
  • 深度解析利用ES6进行Promise封装总结
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 用Visual Studio开发以太坊智能合约
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 带你开发类似Pokemon Go的AR游戏
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)(1.11) SiK Radio v2(一)
  • (1)虚拟机的安装与使用,linux系统安装
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4)logging(日志模块)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C++哈希表01)
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • ./configure、make、make install 命令
  • .Net FrameWork总结
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • 。Net下Windows服务程序开发疑惑
  • ??eclipse的安装配置问题!??
  • @Async注解的坑,小心
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析