package com.interview.misc; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class AddingTwoSetOfIntervals { public static class Pair implements Comparable<Pair>{ int low; int high; Pair(int low,int high){ this.low = low; this.high = high; } @Override public int compareTo(Pair o) { if(this.low <= o.low){ return -1; }else{ return 1; } } public String toString(){ return low + " " + high; } } public List<Pair> combineInterval(Pair[] arr1, Pair[] arr2){ Arrays.sort(arr1); Arrays.sort(arr2); List<Pair> result = new ArrayList<Pair>(); int i=0; int j=0; Pair current = new Pair(Integer.MIN_VALUE,Integer.MIN_VALUE+1); while(i < arr1.length && j < arr2.length){ if(arr1[i].low <= arr2[j].low){ if(arr1[i].low <= current.high){ current.high = Math.max(arr1[i].high,current.high); }else{ current = arr1[i]; result.add(current); } i++; } else{ if(arr2[j].low <= current.high){ current.high = Math.max(arr2[j].high,current.high); }else{ current = arr2[j]; result.add(current); } j++; } } while(i < arr1.length){ if(arr1[i].low <= current.high){ current.high = Math.max(current.high,arr1[i].high); }else{ current = arr1[i]; result.add(current); } i++; } while(j < arr2.length){ if(arr2[j].low <= current.high){ current.high = Math.max(current.high, arr2[j].high); }else{ current = arr2[j]; result.add(current); } j++; } return result; } public static void main(String args[]){ Pair p1 = new Pair(1,3); Pair p2 = new Pair(4,6); Pair p3 = new Pair(9,15); Pair p4 = new Pair(14,18); Pair[] arr1 = {p1,p2,p3,p4}; Pair r1 = new Pair(2,4); Pair r2 = new Pair(7,8); Pair r3 = new Pair(11,13); Pair[] arr2 = {r1,r2,r3}; AddingTwoSetOfIntervals ats = new AddingTwoSetOfIntervals(); List<Pair> rs = ats.combineInterval(arr1, arr2); System.out.print(rs); } }