Skip to content

Instantly share code, notes, and snippets.

@drem-darios
Last active February 13, 2020 05:13
Show Gist options
  • Save drem-darios/588ffae431fc46756b9041fa45fd92c9 to your computer and use it in GitHub Desktop.
Save drem-darios/588ffae431fc46756b9041fa45fd92c9 to your computer and use it in GitHub Desktop.
Given a list of non-overlapping intervals sorted by their start time, insert a given interval at the correct position and merge all necessary intervals to produce a list that has only mutually exclusive intervals.
import java.util.*;
class Interval {
int start;
int end;
public Interval(int start, int end) {
this.start = start;
this.end = end;
}
};
class InsertInterval {
public static List<Interval> insert(List<Interval> intervals, Interval newInterval) {
List<Interval> mergedIntervals = new ArrayList<>();
int newIntervalStart = newInterval.start;
int newIntervalEnd = newInterval.end;
if (intervals == null || intervals.isEmpty()) {
return new ArrayList<>();
}
Interval interval = intervals.get(0);
int start = interval.start;
int end = interval.end;
for (int i = 1; i < intervals.size(); i++) {
interval = intervals.get(i);
if (newIntervalStart <= end) {
start = Math.min(newIntervalStart, start);
end = Math.max(newIntervalEnd, end);
}
if (end >= interval.start) {
start = Math.min(interval.start, start);
end = Math.max(end, interval.end);
}
else {
mergedIntervals.add(new Interval(start, end));
start = interval.start;
end = interval.end;
}
}
mergedIntervals.add(new Interval(start, end));
return mergedIntervals;
}
public static void main(String[] args) {
List<Interval> input = new ArrayList<Interval>();
input.add(new Interval(1, 3));
input.add(new Interval(5, 7));
input.add(new Interval(8, 12));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(4, 6)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
input = new ArrayList<Interval>();
input.add(new Interval(1, 3));
input.add(new Interval(5, 7));
input.add(new Interval(8, 12));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(4, 10)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
input = new ArrayList<Interval>();
input.add(new Interval(2, 3));
input.add(new Interval(5, 7));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(1, 4)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
}
public static void main(String[] args) {
List<Interval> input = new ArrayList<Interval>();
input.add(new Interval(1, 3));
input.add(new Interval(5, 7));
input.add(new Interval(8, 12));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(4, 6)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
input = new ArrayList<Interval>();
input.add(new Interval(1, 3));
input.add(new Interval(5, 7));
input.add(new Interval(8, 12));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(4, 10)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
input = new ArrayList<Interval>();
input.add(new Interval(2, 3));
input.add(new Interval(5, 7));
System.out.print("Intervals after inserting the new interval: ");
for (Interval interval : InsertInterval.insert(input, new Interval(1, 4)))
System.out.print("[" + interval.start + "," + interval.end + "] ");
System.out.println();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment