Skip to content

Instantly share code, notes, and snippets.

@madhur
Created August 7, 2019 16:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madhur/1060f84e7d52035e6df933fffe702ffe to your computer and use it in GitHub Desktop.
Save madhur/1060f84e7d52035e6df933fffe702ffe to your computer and use it in GitHub Desktop.
merge intervals
// java.util.* and java.util.streams.* have been imported for this problem.
// You don't need any other imports.
public static ArrayList<Interval> insertRange(ArrayList<Interval> intervalsList, Interval insert) {
ArrayList<Interval> merged = new ArrayList<Interval>();
if(intervalsList.size() == 0) {
merged.add(insert);
return merged;
}
boolean inserted = true;
Interval ii = null;
for(Interval interval : intervalsList) {
int start = interval.start;
int end = interval.end;
int startNext = insert.start;
int endNext = insert.end;
// lies next to current interval
if(startNext > end) {
merged.add(interval);
}
// lies in front of the looped interval
else if (endNext < start) {
merged.add(insert);
merged.add(interval);
inserted=true;
}
// overlap scenario
else if (startNext <= end && endNext > start) {
Interval i = new Interval(Math.min(start, startNext), Math.max(end, endNext));
// merged.add(i);
insert = i;
ii = insert;
inserted= false;
}
}
if(inserted==false) {
merged.add(ii);
}
return merged;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment