



public static int widestGap(int n, List<Integer> start, List<Integer> finish) {
List<Interval> intervals = new ArrayList<>();
for(int i =0;i<start.size();i++){
Interval inter = new Interval(start.get(i), finish.get(i));
intervals.add(inter);
}
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval i1, Interval i2){
return i1.start - i2.start;
}
});
LinkedList<Interval> merged = new LinkedList<>();
for(Interval i: intervals){
if(merged.isEmpty() || merged.getLast().end < i.start ){
merged.add(i);
}else{
merged.getLast().end=Math.max(merged.getLast().end, i.end);
}
}
int max= -1;
for(int i=0;i<merged.size()-1;i++){
int gapStart = merged.get(i).end;
int gapEnd = merged.get(i+1).start;
if(gapEnd-gapStart > max)
max = gapEnd - gapStart -1;
}
max = Math.max(max, merged.get(0).start-1);
max = Math.max(max, n- merged.get(merged.size()-1).end);
return max;
}
}