056. Merge Intervals
At a Glance
- Topic: Array
- Pattern: Analyze Pattern
- Difficulty: Medium
- LeetCode: 056
Problem Statement
Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Example 1:
Input: intervals = [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
Example 2:
Input: intervals = [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Example 3:
Input: intervals = [[4,7],[1,4]] Output: [[1,7]] Explanation: Intervals [1,4] and [4,7] are considered overlapping.
Constraints:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104Approach & Solution Steps
- Compare all pairs —
O(n²). - Sort + sweep —
O(n log n)time /O(n)output space. <- pick this in interview.
Optimal JS Solution
function merge(intervals) {
if (intervals.length === 0) return intervals;
const sorted = [...intervals].sort((left, right) => left[0] - right[0]);
const merged = [sorted[0]];
for (let index = 1; index < sorted.length; index++) {
const lastIndex = merged.length - 1;
const [currentStart, currentEnd] = sorted[index];
if (currentStart <= merged[lastIndex][1]) {
merged[lastIndex][1] = Math.max(merged[lastIndex][1], currentEnd);
} else {
merged.push([currentStart, currentEnd]);
}
}
return merged;
}Edge Cases & Pitfalls
- Always consider empty or null inputs.
- Watch out for off-by-one index errors.
Mark this page when you finish learning it.
Last updated on
Spotted something unclear or wrong on this page?