首页 > 其他分享 >刷刷刷 Day 36 | 56. 合并区间

刷刷刷 Day 36 | 56. 合并区间

时间:2023-02-25 16:55:29浏览次数:56  
标签:10 重叠 56 合并 36 intervals 区间 Day

56. 合并区间

LeetCode题目要求

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

示例

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

1 3
2 6
8 10
15 18
以示例简单列出一个区间分布,有图可看出 [1,3] 和 [2,6] 存在重叠,那么需要合并
合并逻辑为,取区间左侧最小和右侧最大。
关键点在于找重叠区域,同时需要注意的是 [1,4] 和 [4,5] 也认为重叠
这题主要找到重叠,进行合并就好了

上代码

class Solution {
    public int[][] merge(int[][] intervals) {

        // 通过 LinkedList 来存储 区间
        LinkedList<int[]> res = new LinkedList<>();
        
        // 由于涉及到了重复区域判断,首先进行排序
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        
        // 第一区间入 list
        res.add(intervals[0]);

        for (int i = 1; i < intervals.length; i++) {
            // 如果当前区间左边值 <= 前一个区间右边值,那么重叠
            if (intervals[i][0] <= res.getLast()[1]) {
                // 取前一区间的左边值 作为开始
                int start = res.getLast()[0];
                // 对比前后两个区间的右边,取大的,合并成一个新的区间
                int end = Math.max(intervals[i][1], res.getLast()[1]);
                // 移除那个将要被合并的区间
                res.removeLast();
                // 合并的新区间存储 结果
                res.add(new int[]{start, end});
            }
            else {
                // 如果不重叠,直接放入结果
                res.add(intervals[i]);
            }         
        }
        return res.toArray(new int[res.size()][]);
    }
}

附:学习资料链接

标签:10,重叠,56,合并,36,intervals,区间,Day
From: https://www.cnblogs.com/blacksonny/p/17154772.html

相关文章

  • 小白成神day4
    用户交互Scannerscanner对象来获取用户的输入Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法来获取输入的字符串,在读取之前一般使用hasN......
  • 刷刷刷 Day 36 | 763. 划分字母区间
    763.划分字母区间LeetCode题目要求给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按......
  • ARC156E Non-Adjacent Matching 解题记录
    经过一定简单的转化,相当于要求解以下的问题:计数长度为\(N\)的序列\(A\)个数,满足:\(A_i\in[0,M]\)\(\sumA_i\leK\)\(\forall_i\A_i+A_{i+1}\le\dfrac{\su......
  • B3612 【深进1.例1】求区间和
    【深进1.例1】求区间和题目描述给定$n$个正整数组成的数列$a_1,a_2,\cdots,a_n$和$m$个区间$[l_i,r_i]$,分别求这$m$个区间的区间和。输入格式共$n+m+2$......
  • 《分布式技术原理与算法解析》学习笔记Day22
    哈希与一致性哈希在分布式系统中,哈希和一致性哈希是数据索引或者数据分布的常见实现方式。数据分布设计原则在分布式数据存储系统中,做存储方案选型时,一般会考虑以下因素......
  • 嵌入式5M570ZF256C5N, 5M570ZM100I5N(CPLD)5M570ZT100C5N设计用于低功耗应用
    MAXV设备系列的特点:低成本、低功耗、非易失性CPLD架构即时启动(0.5ms或更短)配置时间待机电流低至25µA,快速下电/复位操作快速传播延迟和时钟到输出时间内部振荡器模拟RS......
  • Day 24 24.1:逆向分析1 - Steam案例
    STEAM逆向分析url:https://store.steampowered.com/login/?redir=&redir_ssl=1分析思路:输入用户名和密码后,点击登录按钮,通过抓包工具捕获点击登录按钮后发起请求对......
  • #373. 「USACO1.1」Friday the Thirteenth 题解
    #373.「USACO1.1」FridaytheThirteenth题解题目传送门题目知识点模拟+数学闰年知识点题意说明写一个程序来计算在n年里13日落在星期一,星期二......星期日的次数......
  • 题解 LOJ P2393 「JOISC 2017 Day 2」门票安排
    题意咕咕咕。题解这题太神了,无限膜拜p_b_p_b,搬运一波题解。首先考虑二分。题意等价于选一些区间进行反转。首先注意到反转的区间两两有交,不然不反转一定更优。设反转......
  • day02-面向对象高级2-接口&多态
    1,final关键字1,认识finalfinal关键字最终的意思,可以用来修饰(类,方法,变量)特点:修饰类类不能被继承修饰方法,方法不能被子类重写修饰变量,该变量只能被赋值一次final修......