题目描述
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.
解题思路
按照 start 将intervals 排序,从头开始,两两合并,遇到不可并,保存当前结果。
代码
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals = sorted(intervals)
ans = []
cur = 1
n = len(intervals)
if n < 2:
return intervals
temp = intervals[0]
while cur < n:
if self.can_merge(temp, intervals[cur]):
temp = [min(temp[0], intervals[cur][0]), max(temp[1], intervals[cur][1])]
cur += 1
if cur == n:
ans.append(temp)
else:
ans.append(temp)
temp = intervals[cur]
print(temp, cur)
cur += 1
if cur == n:
ans.append(temp)
return ans
def can_merge(self, a, b):
if b[0] <= a[0] <= b[1] or a[0] <= b[0] <= a[1]:
return True
return False