【算法】【线性表】【数组】合并区间

1  题目

以数组 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] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

2  解答

 

复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        // 参数边界校验
        if (intervals == null || intervals.length <= 0) {
            return intervals;
        }
        // 对数组按左坐标进行升序排序
        Arrays.sort(intervals, Comparator.comparingInt(o -> o[0]));
        // 定义返回结果
        List<int[]> res = new ArrayList<>();
        // 根据每个元素的右坐标以及下一个元素的区间进行比较判断逐个遍历
        for (int i = 0; i < intervals.length; ) {
            int left = intervals[i][0];
            int right = intervals[i][1];
            int j = i + 1;
            // 如果是最后一个元素了,不需要合并了,直接加入结果结束
            if (j == intervals.length) {
                res.add(new int[]{left, right});
                break;
            }
            // 寻找 i 元素可以向后合并的元素
            for (; j < intervals.length; j++) {
                int innerLeft = intervals[j][0];
                int innerRight = intervals[j][1];
                // 在下一个元素的区间内,然后继续向后遍历
                if (innerLeft <= right && right <= innerRight) {
                    right = innerRight;
                    continue;
                }
                // 包含了下一个区间的也继续向后,比如 [1,4] [2,3]
                if (right >= innerRight) {
                    continue;
                }
                break;
            }
            // 说明不在下一个区间了,说明算是一种结果了
            i = j;
            res.add(new int[]{left, right});
        }
        return res.toArray(new int[res.size()][]); 
    }
}
复制代码

 

加油。

 

posted @   酷酷-  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-02-18 【Spring IOC】【七】容器源码解析- PostConstruct、PreDestory的源码分析
2023-02-18 【Spring IOC】【六】容器源码解析- initializeBean剩下的初始化工作
2023-02-18 【Spring IOC】【五】容器源码解析- 属性填充populateBean
点击右上角即可分享
微信分享提示