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); } }