classSolution{privatestaticclassInterval{int start;int end;Interval(int[] interval){this.start = interval[0];this.end = interval[1];}int[]toArray(){returnnewint[]{this.start,this.end};}}privatestaticclassIntervalComparatorimplementsComparator<Interval>{@Overridepublicintcompare(Interval a, Interval b){return Integer.compare(a.start, b.start);}}publicint[][]merge(int[][] intervals){
List<Interval> intervalsList =newLinkedList<>();for(int[] interval : intervals){
intervalsList.add(newInterval(interval));}
intervalsList.sort(newIntervalComparator());
LinkedList<Interval> merged =newLinkedList<>();for(Interval interval : intervalsList){// if the list of merged intervals is empty or if the current// interval does not overlap with the previous, simply append it.if(merged.isEmpty()|| merged.getLast().end < interval.start){
merged.add(interval);}// otherwise, there is overlap, so we merge the current and previous// intervals.else{
merged.getLast().end = Math.max(merged.getLast().end, interval.end);}}int i =0;int[][] result =newint[merged.size()][2];for(Interval mergedInterval : merged){
result[i]= mergedInterval.toArray();
i++;}return result;}}