diff --git a/work/1/Medium/Array/56.merge-intervals.py b/work/1/Medium/Array/56.merge-intervals.py new file mode 100644 index 0000000..e461761 --- /dev/null +++ b/work/1/Medium/Array/56.merge-intervals.py @@ -0,0 +1,56 @@ +""" +56. Merge Intervals +Difficulty: Medium +https://leetcode.com/problems/merge-intervals/ + +────────────────────────────────────────────────── + +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 <= 10^4 + + • intervals[i].length == 2 + + • 0 <= starti <= endi <= 10^4 +""" + + +class Solution: + def merge(self, intervals: list[list[int]]) -> list[list[int]]: + intervals.sort(key=lambda x: x[0]) + result = [] + + for start, end in intervals: + if result and start <= result[-1][1]: + result[-1][1] = max(result[-1][1], end) + else: + result.append([start, end]) + + return result