LC 56 - Merge Intervals
LC 56 - Merge Intervals
Question
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:
1
2
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:
1
2
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Example 3:
1
2
Input: intervals = [[4,7],[1,4]]
Output: [[1,7]]
Explanation: Intervals [1,4] and [4,7] are considered overlapping.
Constraints:
1 <= intervals.length <= 104intervals[i].length == 20 <= starti <= endi <= 104
Links
Question here and solution here
Solution
concept
We sort the intervals by the starting point and iterative through each intervals. We do not need to worry about the starting point here since it is already sorted.
code
1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key = lambda i : i[0])
ans = [intervals[0]]
for start, end in intervals[1:]:
if start <= ans[-1][1]:
ans[-1][1] = max(ans[-1][1], end)
else:
ans.append([start, end])
return ans
Complexity
time: $O(n\log n)$
space: $O(n)$
This post is licensed under CC BY 4.0 by the author.