算法训练(leetcode)二刷第二十七天 | *56. 合并区间、*738. 单调递增的数字、*968. 监控二叉树

server/2024/11/17 18:27:11/

刷题记录

  • *56. 合并区间
  • *738. 单调递增的数字
  • *968. 监控二叉树

*56. 合并区间

leetcode题目地址

重叠区间,若前一个区间的右边界大于等于当前区间的左边界,则有重叠,合并两个区间。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( l o g n ) O(logn) O(logn)

// java
class Solution {public int[][] merge(int[][] intervals) {if(intervals.length<=1) return intervals;Arrays.sort(intervals, (a, b) -> {if(a[0] == b[0]) return a[1] - b[1];return a[0]-b[0];});List<int[]> result = new LinkedList<>();result.add(new int[]{intervals[0][0], intervals[0][1]});for(int i=1; i<intervals.length; i++){if(intervals[i][0] <= result.getLast()[1]){int left = result.getLast()[0];int right = Math.max(intervals[i][1], result.getLast()[1]);  result.removeLast();result.add(new int[]{left, right});}else{result.add(intervals[i]);}}return result.toArray(new int[result.size()][]);}
}

*738. 单调递增的数字

leetcode题目地址

局部最优:当前一个数字大于当前数字时,将前一个数字减一,当前数字置为9。

确定遍历顺序:例如332,若从前向后遍历,i=1时,符合题目要求;当i=2时,前一个数字大于当前数字,将前一个数字减一,当前数字置为9,得到329,依旧不符合题意。

因此,需要从后向前遍历,每一步的操作是基于上一步大结果。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
class Solution {// public boolean isValid()public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] arr = s.toCharArray();int flag = arr.length;for(int i=arr.length-1; i>0; i--){if(arr[i-1] > arr[i]){arr[i-1]--;flag = i;}}for(int i=flag; i<arr.length; i++){arr[i] = '9';}return Integer.parseInt(String.valueOf(arr));}
}

*968. 监控二叉树

leetcode题目地址

借助后序遍历查看当前结点是否需要加摄像头。
结点有三种状态:
0:当前结点无覆盖
1:当前结点有摄像头
2:当前结点有覆盖

尽可能少的安装摄像头,要在叶结点的上一层安装摄像头,然后向根节点方向没个两个节点加一个摄像头;当遇到空节点时,结点状态应该是有覆盖,这样就可以在叶结点的父节点上安摄像头了。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {int cnt = 0;public int postOrder(TreeNode root){if(root == null) return 2;int left = postOrder(root.left);int right = postOrder(root.right);if(left == 0 || right == 0) {// 左右孩子结点有无覆盖 当前结点加摄像头cnt++;return 1;}if(left == 2 && right == 2) {// 左右节点均有覆盖 当前结点无覆盖 return 0;}if(left == 1 || right == 1){return 2;}return -1;}public int minCameraCover(TreeNode root) {int flag = postOrder(root);if(flag == 0) cnt++;return cnt;}
}

http://www.ppmy.cn/server/142707.html

相关文章

2019计挑赛c语言

1.下列选项中,说法正确的是(D)。 a.函数的形参可以是常量、变量或表达式 实参可以是任何类型(可以是常量,变量或表达式),但是形参却不能是表达式 形参不能是表达式 b.函数返回值的类型是由return语句中表达式类型决定 函数返回值的类型是由函数定义时指定的类型决定的,…

工业相机选取

1.相机分类&#xff1a; 1.1 在相机曝光方式中&#xff0c;全局曝光和卷帘曝光是两种主流技术。CCD相机通常采用全局曝光方式&#xff0c;而CMOS相机则可能采用卷帘曝光。 面阵相机与全局曝光关联与区别 关联&#xff1a;面阵相机可以使用全局曝光作为曝光方式&#xff0c;但…

github 以及 huggingface下载模型和数据

runningcheese/MirrorSite: 镜像网站合集 (github.com) huggingface 下载模型和数据使用snapshot_download的方法 不会修改HuggingFace模型下载默认缓存路径&#xff1f;一篇教会你!_huggingface默认下载路径-CSDN博客 下载模型 使用snapshot_download 使用snapshot_down…

当kafka消费的数据滞后1000条时,打印告警信息

要在 Kafka 消费者中实现当数据滞后1000条时打印告警信息&#xff0c;你需要在消费循环中添加逻辑来检查当前消费者的偏移量与主题中的最新偏移量之间的差异。如果这个差异大于1000&#xff0c;就打印告警信息。以下是修改后的代码示例&#xff1a; package com.mita.web.core.…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network&#xff08;RNN&#xff0c;循环神经网络&#xff09;1.1 词汇vector的编码方式1.2 RNN的变形…

常见git命令记录

记录一些常见的git操作 下载代码 下载 git clone [代码连接] 切分支 git branch -b [分支名] 提交代码 添加 git add [需要提交的代码路径] 提交 git commit -m "一些骚话" push git push origin HEAD:refs/for/[仓名称] 通过diff文件&#xff0c;同步修…

PCL 点云拟合 最小二乘法拟合平面

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1计算点云质心 2.1.2最小二乘法拟合平面 2.1.3可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一…

Dubbo 使用轻量的 Java SDK 开发 RPC Server 和 Client

本示例演示如何使用轻量 Dubbo SDK 开发 RPC Server 与 Client&#xff0c;示例使用 Java Interface 方式定义、发布和访问 RPC 服务&#xff0c;底层使用 Triple 协议通信。本示例完整代码请参见 dubbo-samples。 基于 Dubbo 定义的 Triple 协议&#xff0c;你可以轻松编写浏…