Skip to content
thesarfo

Reference

Merge Overlapping Intervals

Merging all overlapping intervals into the minimum number of non-overlapping ones by sorting and extending in place.

views 0

Merge all overlapping intervals into the minimum number of non-overlapping ones. (LeetCode 56) For [(1,3),(2,6),(8,9),(8,10),(2,4),(15,18),(16,17)], the answer merges down to 3 intervals: (1,6), (8,11), (15,18).

Approach: sort intervals by start time. Two intervals are mergeable if the next one’s start is <= the current merged interval’s end (in which case extend the end); otherwise, close out the current interval and start a new one.

public int[][] merge(int[][] intervals) {
if (intervals.length == 0) {
return new int[0][];
}
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> ans = new ArrayList<>();
for (int[] interval : intervals) {
if (ans.isEmpty() || interval[0] > ans.get(ans.size() - 1)[1]) {
ans.add(interval);
} else {
ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], interval[1]);
}
}
return ans.toArray(new int[ans.size()][]);
}

Time: O(n log n) for the sort + O(n) for the single merge pass. Space: O(n).