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]
.
Subscribe to see which companies asked this question
//不保证开始的输入都是按一定顺序,引用Collections.sort();
//[1,5][6,9]------[1,5][7,9]----[1,5][2,8]
<pre name="code" class="java">/**
* 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; }
* }
*/
public class Solution {
public List<Interval> merge(List<Interval> intervals) {
if (intervals == null || intervals.size() <= 1) {
return intervals;
}
Collections.sort(intervals, new IntervalComparator());
List<Interval> result = new ArrayList<Interval>();
Interval last = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
Interval curt = intervals.get(i);
if(last.end<curt.start){result.add(last);last=curt;}
// else if(last.end<curt.end){last.end=curt.end;}
else if (curt.start <= last.end ){
last.end = Math.max(last.end, curt.end);}
// else{
// result.add(last);
// last = curt;
// }
}
result.add(last);
return result;
}
private class IntervalComparator implements Comparator<Interval> {
public int compare(Interval a, Interval b) {
return a.start - b.start;
}
}
}