Merge Intervals
Question (LC.56)
Example
I: [[1,3], [2,6], [8,10], [15,18]]
O: [[1,6], [8,10], [15,18]]
I: [[3,4], [1,5]]
O: [[1,5]]Approach
Code
public List<Interval> merge(List<Interval> intervals) {
List<Interval> results = new ArrayList<>();
// edge check
if (intervals == null || intervals.size() == 0) {
return results;
}
// sort by start time
Collections.sort(intervals, (Interval i1, Interval i2) -> i1.start - i2.start);
// scan sorted intervals
int mergeStartTime = intervals.get(0).start;
int mergeEndTime = intervals.get(0).end;
for (Interval intv : intervals) {
if (intv.start <= mergeEndTime) {
mergeEndTime = Math.max(mergeEndTime, intv.end);
} else {
results.add(new Interval(mergeStartTime, mergeEndTime));
mergeStartTime = intv.start;
mergeEndTime = intv.end;
}
}
results.add(new Interval(mergeStartTime, mergeEndTime));
return results;
}Complexity
Last updated