-
Notifications
You must be signed in to change notification settings - Fork 0
Merge Intervals (sort merge)
Tim_Gao edited this page Sep 16, 2016
·
2 revisions
/**
* 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() < 2){
return intervals;
}
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
if(i1.start != i2.start){
return i1.start - i2.start;
} else {
return i1.end - i2.end;
}
}
});
Stack<Interval> st = new Stack<>();
for (int i=intervals.size()-1; i>=0; --i){
Interval crt = intervals.get(i);
while (!st.isEmpty() && crt.end >= st.peek().start){
Interval top = st.pop();
crt.end = Math.max(crt.end, top.end);
}
st.push(crt);
}
return new ArrayList<Interval>(st);
}
}