Leetcode56. 合并区间

99 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、题目描述:

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

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/me…

二、思路分析:

先排序再遍历。start代表新插入数组开始值,end代表结束值。时间复杂度主要在于排序O(nlgn)

三、AC 代码:

 * @param {number[][]} intervals
 * @return {number[][]}
 */
var merge = function(intervals) {
    if(intervals.length<=1) return intervals;
    let res=[];
    intervals.sort((a,b)=>a[0]-b[0]);
    let i=0;
    let len=intervals.length;
    while(i<len){
        let j=i+1;
        let end=intervals[i][1];
        while(j<len&&intervals[j][0]<=end) {
            end=Math.max(end,intervals[j][1])
            j++;
        }
        res.push([intervals[i][0],end]);
        i=j;
    }
    return res;
};

四、总结:

快慢指针