28. Merge Intervals
Each interval is [start, end]. Merge all overlapping intervals (touching ends count as overlapping) and return the result in any order.
Example 1
Input:
intervals = [[1,4],[2,6],[8,10],[9,12]]Output:
[[1,6],[8,12]]Example 2
Input:
intervals = [[1,2],[2,3]]Output:
[[1,3]]Hint 1
After sorting by start, an interval can only overlap the most recent merged one.
Approach 1: Sort + sweep ✅
Sort by start; extend the last merged interval or start a new one.
⏱ Time O(n log n)💾 Space O(n)
Reference solution for Sort + sweep (time O(n log n), space O(n)). Each solution passes every test in all four languages.
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: x[0]) # by start
res = []
for s, e in intervals:
if res and s <= res[-1][1]: # overlaps the last merged interval
res[-1][1] = max(res[-1][1], e)
else:
res.append([s, e])
return resclass Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
List<int[]> res = new ArrayList<>();
for (int[] cur : intervals) {
if (!res.isEmpty() && cur[0] <= res.get(res.size() - 1)[1])
res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], cur[1]);
else res.add(new int[]{cur[0], cur[1]});
}
return res.toArray(new int[0][]);
}
}class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> res;
for (auto& cur : intervals) {
if (!res.empty() && cur[0] <= res.back()[1]) res.back()[1] = max(res.back()[1], cur[1]);
else res.push_back(cur);
}
return res;
}
};function merge(intervals) {
intervals.sort((a, b) => a[0] - b[0]);
const res = [];
for (const [s, e] of intervals) {
if (res.length && s <= res[res.length - 1][1]) res[res.length - 1][1] = Math.max(res[res.length - 1][1], e);
else res.push([s, e]);
}
return res;
}Try solving it yourself first. Interviewers care more about how you explain the approach than about the finished code.
Watch the core idea of this problem step by step. Change the input and press Visualize.
Explained in the lesson Sorting Algorithms.
Run your code to see results here.