合并区间

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

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

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

/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
//将重复区间进行合并
function mergeRepeat(left,right){
    let left_max = left[1];
    let left_min = left[0];

    let right_max = right[1];
    let right_min = right[0];

    let min = left_min<right_min?left_min:right_min;
    let max = left_max>right_max?left_max:right_max;
    return [min,max];
}

//检查是否有重复区间
function IsRepeat(left,right){
    let left_max = left[1];
    let left_min = left[0];

    let right_max = right[1];
    let right_min = right[0];

    if(left_min>right_max|| left_max<right_min){
        return 0;//没有重复区间
    }
    return 1;//有重复区间
}
function sortByindexZero(num){
    return function(a,b){
        var value1 = a[num];
        var value2 = b[num];
        return value1-value2;
    }
}
var merge = function(intervals) {
    let i =0;
    //排序数组内数组的第一个元素
    intervals.sort(sortByindexZero(0));
    while(i<intervals.length-1){
        if(IsRepeat(intervals[i],intervals[i+1])==1){//如果重复
            intervals[i+1] = mergeRepeat(intervals[i],intervals[i+1]);
            intervals[i] = "";
        }
        i++;
    }
    return intervals.filter(item=>item!="");
};

 

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-10-28 19:18  唐糖PJS  阅读(203)  评论(0编辑  收藏  举报