Leetcode56 题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
解法代码如下:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
def takeFirst(x):
return x[0]
intervals.sort(key=takeFirst)
ans = list()
ans.append(intervals[0])
for i in range(1, len(intervals)):
# 取队列最后一个元素
tmp = ans[-1]
if tmp[1] >= intervals[i][0]:
# 注意这里,需要取二者中较大的。 考虑测试用例[[1,4],[2,3]]
# 之前这里没有注意,导致上面的用例没通过。
tmp[1] = max(tmp[1], intervals[i][1])
else:
ans.append(intervals[i])
return ans
该题的主要思想是排序,然后利用队列来存储已经合并的区间。
此题解法在日常开发中也比较常用,可以采用此思路来合并。如合并某些用户选择的时间及日期区间等。