题目
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].
分析
这道题很值得一写。需要注意的是,怎么写比较函数,以及怎么用写好的比较函数排序。
Array可以用sort,collection也可以。
implements Comparator
Collections.sort(intervals, new IntervalComparator());
另外一个思路,也是更快的一种想法,就是把数都取出来,存进数组里。基本类型一定会更快,更高。
class Solution {
public static List<Interval> merge(List<Interval> intervals) {
Collections.sort(intervals, new IntervalComparator());
int lastIndex = -1;
int lastRange = Integer.MIN_VALUE;
Iterator<Interval> iterator = intervals.iterator();
while (iterator.hasNext()) {
Interval interval = iterator.next();
if (interval.start <= lastRange) {
if (interval.end > lastRange) {
Interval last = intervals.get(lastIndex);
last.end = interval.end;
intervals.set(lastIndex,last);
lastRange = interval.end;
} else {
}
iterator.remove();
} else {
lastIndex++;
lastRange = interval.end;
}
}
return intervals;
}
static class IntervalComparator implements Comparator<Interval>
{
public int compare(Interval i1, Interval i2)
{
return i1.start - i2.start;
}
}
}