import java.util.*;
/**
* 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<Interval> merge(ArrayList<Interval> intervals) {
Collections.sort(intervals,new Comparator<Interval>(){
@Override
public int compare(Interval o1, Interval o2){
if(o1.start != o2.start){
return o1.start - o2.start;
}
else
return o1.end - o2.end;
}
});
Stack<Interval> stack = new Stack<>();
for(int i = 0; i < intervals.size(); i++){
if(stack.isEmpty()){
stack.push(intervals.get(i));
}else{
Interval t = stack.peek();
if(t.end >= intervals.get(i).start){
stack.pop();
stack.push(getnew(t,intervals.get(i)));
}else{
stack.push(intervals.get(i));
}
}
}
ArrayList<Interval> res = new ArrayList<>(stack);
return res;
}
Interval getnew(Interval i1, Interval i2){
int start = Math.min(i1.start, i2.start);
int end = Math.max(i1.end,i2.end);
return new Interval(start,end);
}
}