合并区间 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;
}

浙公网安备 33010602011771号