Merge Intervals
Medium
IntervalsSorting
Problem
Given an array of intervals where intervals[i] = [start, end], merge all overlapping intervals and return the resulting non-overlapping list, sorted by start.
Example 1
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Example 2
Input: [[1,4],[4,5]]
Output: [[1,5]]
Constraints
- 1 ≤ intervals.length ≤ 10⁴
- start ≤ end
Approach — Core Patterns
This is a Core Patterns problem. The idea: pick the data structure best matched to the constraints and solve it in one clean pass. Work through the reference code below line by line, then re-derive it yourself in the editor — that's how the pattern sticks.
Complexity: see the walkthrough below.
Solution code
Python
class Solution:
def merge(self, intervals):
intervals.sort()
res = []
for s, e in intervals:
if res and s <= res[-1][1]:
res[-1][1] = max(res[-1][1], e)
else:
res.append([s, e])
return res
Java
import java.util.*;
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> out = new ArrayList<>();
for (int[] iv : intervals) {
if (!out.isEmpty() && iv[0] <= out.get(out.size() - 1)[1]) {
out.get(out.size() - 1)[1] = Math.max(out.get(out.size() - 1)[1], iv[1]);
} else {
out.add(iv);
}
}
return out.toArray(new int[out.size()][]);
}
}
Practice it
Reading a solution isn't the same as being able to write it under pressure. Open this problem in the in-browser editor, hide the solution, and solve it from scratch — your code runs against real test cases instantly.
Solve Merge Intervals interactively → ← All solutions