Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
题意:给出一些区间段,求其合并后的区间段
思路:排序时,[a,b]首先a最小的排在前面,如果起始相等,就以b最小的排在前面。在合并时。首先以第一个作为第一个区间段,如果下一个区间段的起始位置位于前一个区间段之间,就更新end。
代码如下:
class Solution {
public List<Interval> merge(List<Interval> intervals)
{
if (intervals.isEmpty())
return intervals;
Comparator<Interval> cmp = new Comparator<Interval>() {
public int compare(Interval a, Interval b) {
if (a.start != b.start)
return a.start - b.start;
return a.end - b.end;
}
};
List<Interval> res = new ArrayList<Interval>();
Collections.sort(intervals, cmp);
int size = intervals.size();
int start = intervals.get(0).start;
int end = intervals.get(0).end;
for (int i = 1; i < size; i++)
{
Interval tmp = intervals.get(i);
if (tmp.start >= start && tmp.start <= end)
{
end = Math.max(tmp.end, end);
}
else
{
Interval interval = new Interval(start, end);
res.add(interval);
start = tmp.start;
end = tmp.end;
}
}
res.add(new Interval(start, end));
return res;
}
}