Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.
解法:
这题重点是需要先对Interval的元素按照第一位进行排序,排序之后才能做下面的操作。
具体做法是比较前一个数的last和后一个数的start,如果后面比前面小,那就是有交叉,更新前面的值。
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
class Solution {
public List<Interval> merge(List<Interval> intervals) {
if(intervals.size()<=1)return intervals;
Collections.sort(intervals,new IntervalComparator());
List<Interval> res = new ArrayList<Interval>();
Interval last = intervals.get(0);
for(int i=0;i<intervals.size();i++){
Interval curr = intervals.get(i);
if(curr.start <= last.end){
last.end = Math.max(last.end,curr.end);
}else{
res.add(last);
last = curr;
}
}
res.add(last);
return res;
}
class IntervalComparator implements Comparator<Interval>{
public int compare(Interval s1, Interval s2){
return s1.start-s2.start;
}
}
}