Back to Problem
Official
213 views
Editorial: Merge Intervals
by admin ·
30
1 Intuition
Sort intervals by start point. Then merge adjacent overlapping intervals. This greedy approach ensures we process intervals in order and combine overlapping ones.
2 Approach
1. Sort intervals by start position
2. Initialize result with first interval
3. For each subsequent interval:
- If it overlaps with last interval in result (curr_start <= last_end)
- Merge by updating last_end = max(last_end, curr_end)
- Otherwise, add interval to result
3 Complexity Analysis
**Time Complexity:** O(n log n) - sorting dominates
**Space Complexity:** O(1) or O(n) - depending on sorting algorithm
Sorting is the bottleneck, not the merging.
4 Solution Code
def merge(intervals):
intervals.sort(key=lambda x: x[0])
result = [intervals[0]]
for current in intervals[1:]:
last = result[-1]
if current[0] <= last[1]:
result[-1] = [last[0], max(last[1], current[1])]
else:
result.append(current)
return result
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end());
vector<vector<int>> result;
result.push_back(intervals[0]);
for (int i = 1; i < intervals.size(); i++) {
if (intervals[i][0] <= result.back()[1]) {
result.back()[1] = max(result.back()[1], intervals[i][1]);
} else {
result.push_back(intervals[i]);
}
}
return result;
}
5 Code Walkthrough
For [[1,3],[2,6],[8,10],[15,18]]:
- Sort: [[1,3],[2,6],[8,10],[15,18]]
- Result starts with [1,3]
- [2,6]: 2<=3, merge → [1,6]
- [8,10]: 8>6, no overlap → add [8,10]
- [15,18]: 15>10, no overlap → add [15,18]
Result: [[1,6],[8,10],[15,18]]