这也是一题我有点不太能理解为什么可以标为hard的题目。解法其实很直观,就是先对interval
进行排序,然后遍历一遍。这里需要注意的点有两个:
对interval
进行排序需要构造一个比较器。
在遍历过程中,如果结果集合为空或者当前interval
与结果集合中的最后一个interval
不重叠,那么就直接将当前interval
直接加入到结果集合中;如果发生了重叠,那么将结果集合的最后一个interval
的右端点改为当前interval
的右端点。
实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Solution { public List<Interval> merge(List<Interval> intervals) { List<Interval> result = new ArrayList<Interval>(); Comparator<Interval> comparator = new Comparator<Interval>() { @Override public int compare(Interval o1, Interval o2) { if (o1.start == o2.start) { return o1.end - o2.end; } return o1.start - o2.start; } }; Collections.sort(intervals, comparator); for (Interval interval : intervals) { int last = result.size(); if (last == 0 || result.get(last - 1).end < interval.start) { Interval newInterval = new Interval(interval.start, interval.end); result.add(newInterval); } else { result.get(last - 1).end = Math.max(interval.end, result.get(last - 1).end); } } return result; } }
|