给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
public class Mergeqvjian {
public class Interval {
int start;
int end;
Interval() {
start = 0;
end = 0;
}
Interval(int s, int e) {
start = s;
end = e;
}
}
/*
* 1.对区间对按start进行排序
* 2.依次判断相邻的两个区间对,看后一个区间对的start是否<=前一个区间对的end,如果是,则合并后的区间的end=Math.max(
* intervals1.end,intervals2.end) 如果不是,则判断下两对
*/
public List<Interval> merge(List<Interval> intervals) {
if (intervals == null || intervals.size() < 2) {
return intervals;
}
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});
int help = 0;
while (help < intervals.size() - 1) {
if (intervals.get(help).end >= intervals.get(help + 1).start) {
intervals.get(help).end = Math.max(intervals.get(help).end, intervals.get(help + 1).end);
intervals.remove(help + 1);
} else {
help++;
}
}
return intervals;
}
}