1.简述:

描述

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

请保证合并后的区间按区间起点升序排列。

数据范围:区间组数 #yyds干货盘点# 面试必刷TOP101:合并区间_代码实现,区间内 的值都满足 #yyds干货盘点# 面试必刷TOP101:合并区间_空间复杂度_02

要求:空间复杂度 #yyds干货盘点# 面试必刷TOP101:合并区间_时间复杂度_03,时间复杂度 #yyds干货盘点# 面试必刷TOP101:合并区间_时间复杂度_04

进阶:空间复杂度 #yyds干货盘点# 面试必刷TOP101:合并区间_时间复杂度_05,时间复杂度#yyds干货盘点# 面试必刷TOP101:合并区间_时间复杂度_05

示例1

输入:

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

返回值:

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


示例2

输入:

[[0,10],[10,20]]

返回值:

[[0,20]]

2.代码实现:

import java.util.*;
public class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> res = new ArrayList<>();
//去除特殊情况
if(intervals.size() == 0)
return res;
//重载比较,按照区间首排序
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval o1, Interval o2){
if(o1.start != o2.start)
return o1.start - o2.start;
else
return o1.end - o2.end;
}
});
//放入第一个区间
res.add(intervals.get(0));
int count = 0;
//遍历后续区间,查看是否与末尾有重叠
for(int i = 1; i < intervals.size(); i++){
Interval o1 = intervals.get(i);
Interval origin = res.get(count);
if(o1.start > origin.end){
res.add(o1);
count++;
//区间有重叠,更新结尾
}else{
res.remove(count);
Interval s = new Interval(origin.start, o1.end);
if(o1.end < origin.end)
s.end = origin.end;
res.add(s);
}
}
return res;
}
}