Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
Given
[1,3],[2,6],[8,10],[15,18],return
[1,6],[8,10],[15,18].Solution:Same logic as insert intervals, but we need to sort the intervals first.
/**
* 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 ArrayList merge(ArrayList intervals) {
ArrayList ret = new ArrayList();
if(intervals.size() == 0) return ret;
Collections.sort(intervals, new myComparator()); // use Comparator to compare non-primitive data types
Interval tmp = intervals.get(0);
for(int i = 1; i < intervals.size(); i++){
Interval cur = intervals.get(i);
if(cur.end < tmp.start){
ret.add(cur);
}
else if (cur.start > tmp.end){
ret.add(tmp);
tmp = cur;
}
else{
int start = Math.min(cur.start, tmp.start);
int end = Math.max(cur.end, tmp.end);
tmp = new Interval(start, end);
}
}
ret.add(tmp);
return ret;
}
}
class myComparator implements Comparator{
public int compare(Interval a, Interval b){
return a.start - b.start;
}
}
No comments:
Post a Comment