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

Leetcode Hot 100刷题记录 -Day10(合并区间)

合并区间

问题描述:

        以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] =[starti,endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

解题思路:

56. 合并区间 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/merge-intervals/solutions/203562/he-bing-qu-jian-by-leetcode-solution/?envType=study-plan-v2&envId=top-100-liked

//提交版
class Solution {
    public int[][] merge(int[][] intervals) {
         if(intervals.length == 0)
            return new int[0][0];
        //Arrays.sort为给数组排序
        //new Comparator<int[]>():自定义排序方式
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override//重写方法标签
            public int compare(int[] o1, int[] o2) {
                //比较两个二维数组的左端点,若是o1[0]>o2[0],则返回正直,否则返回负值或者0
                //完成二维数组排序
                return o1[0] - o2[0];
            }
        });
        //创建一个空列表
        List<int[]> merged = new ArrayList<>();
        for (int i =0 ; i<intervals.length;i++){
            //用L和R分别存储二维数组的左右端点
            int L = intervals[i][0];
            int R = intervals[i][1];
            //若是列表为空,则直接将数组加入
            //若是列表中最后一个数组的右端 小于待加入数组的左端,也直接加入
            if (merged.size() == 0 || merged.get(merged.size()-1)[1]<L){
                merged.add(new int[]{L,R});
            }else {
                merged.get(merged.size()-1)[1] = Math.max(merged.get(merged.size()-1)[1],R);
            }
        }
        return merged.toArray(new int[merged.size()][]);
}
}


//带有输入输出版
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class hot11_merge {
    public int[][] merge(int[][] intervals){
        //二维数组为空,返回空列表
        if(intervals.length == 0)
            return new int[0][0];
        //Arrays.sort为给数组排序
        //new Comparator<int[]>():自定义排序方式
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override//重写方法标签
            public int compare(int[] o1, int[] o2) {
                //比较两个二维数组的左端点,若是o1[0]>o2[0],则返回正直,否则返回负值或者0
                //完成二维数组排序
                return o1[0] - o2[0];
            }
        });
        //创建一个空列表
        List<int[]> merged = new ArrayList<>();
        for (int i =0 ; i<intervals.length;i++){
            //用L和R分别存储二维数组的左右端点
            int L = intervals[i][0];
            int R = intervals[i][1];
            //若是列表为空,则直接将数组加入
            //若是列表中最后一个数组的右端 小于待加入数组的左端,也直接加入
            if (merged.size() == 0 || merged.get(merged.size()-1)[1]<L){
                merged.add(new int[]{L,R});
            }else {
                merged.get(merged.size()-1)[1] = Math.max(merged.get(merged.size()-1)[1],R);
            }
        }
        return merged.toArray(new int[merged.size()][]);
    }

    public static void main(String[] args){
        int[][] intervals = {{1,3},{2,6},{8,10},{15,18}};
        //deepToString:将二维数组转换为字符串
        System.out.println("输入:" + Arrays.deepToString(intervals));
        hot11_merge hot11Merge = new hot11_merge();
        int[][] result = hot11Merge.merge(intervals);
        System.out.println("输出:" + Arrays.deepToString(result));
    }
}

 知识点总结:

  • 重写排序方式的函数:

        Arrays.sort(intervals, new Comparator<int[]>() { @Override//重写方法标签
            public int compare(int[] o1, int[] o2)

                        return   }

  • deepToString:将二维数组转换为字符串

http://www.kler.cn/news/302804.html

相关文章:

  • druid连接gbase8s数据库报错空指针
  • vue2 组件通信
  • MySql Index索引使用注意
  • 数据分析-13-时间序列异常值检测的类型及常见的检测方法
  • 专题三_二分查找算法_算法详细总结
  • Jmeter之beanshell使用
  • 适合博客的组件库
  • RHEL 7 安装配置( Linux 网络操作系统 02)
  • 【智能流体力学】数值模拟中的稳态和瞬态
  • OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)
  • C#多线程进阶
  • Java面试题·解释题·单例模式、工厂模式、代理模式部分
  • 基于Qt的串口包装器
  • 【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
  • 数学建模笔记—— 最大最小化规划模型
  • mysql——关于表的增删改查(CRUD)
  • macOS镜像下载(ISO、DMG)
  • xss-labs-master通关教程
  • 起重机检测系统源码分享
  • 【C++11 —— 包装器】
  • 【Sceneform-EQR】通过sceneform-eqr实现一个视频播放器(使用安卓MediaPlayer实现视频播放)
  • 从0开始深入理解并发、线程与等待通知机制
  • 基于微信小程序点餐、外卖系统的设计与实现 (源码+lw+参考文档+核心代码讲解等)
  • 多模态大模型中的图片文本对齐
  • visual studio code下载教程(手把手)
  • reader-lm:小模型 html转markdown
  • SpringBoot开发——整合Spring Data JPA
  • 3D Gaussian Splatting 论文学习
  • (不用互三)AI绘画工具应该如何选择
  • 【C++】——vector模拟实现和迭代器失效问题