合并区间 leetcode

描述:

给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
输入:
[[10,30],[20,60],[80,100],[150,180]]
输出:

[[10,60],[80,100],[150,180]]

算法代码:

/*
 * function Interval(a, b){
 *   this.start = a || 0;
 *   this.end = b || 0;
 * }
 */

/**
 * 
 * @param intervals Interval类一维数组 
 * @return Interval类一维数组
 */
function merge( intervals ) {
    // write code here
    var ans = [] //存储结果数组
    //排序
    var intervals = intervals.sort((a,b)=>a.start-b.start);
    if(intervals.length === 0){
        return intervals;
    }
    if(intervals.length ===1){
        return intervals;
    }
    ans.push(intervals.shift());
    while(intervals.length){
        //右端点 大于下一个左端点
        if(ans[ans.length-1].end >= intervals[0].start){
            //右端点小于下一个右端点
            if(ans[ans.length-1].end <= intervals[0].end){
                   ans[ans.length-1].end = intervals[0].end;
            }
            // 否则处于包含状态 直接丢弃
            intervals.shift();
        }else{
            // 不相交 push到结果数组
            ans.push(intervals.shift());
        }
    }    
    return ans;
}

 

 

posted @ 2021-05-12 23:21  TangTaue  阅读(155)  评论(0编辑  收藏  举报