Leetcode - 56. 合并区间
以数组
intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
提示:
- 1 <= intervals.length <= 104
- intervals[i].length == 2
- 0 <= starti <= endi <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解1 2021/9/8 O(n)
def merge(intervals: list) -> list:
len=intervals.__len__()
if len==1: return intervals
# 题目并没有限定说intervals是升序排列的,先排一下
intervals.sort()
res=[]
l=r=0
while l<len:
a=intervals[l][0]
b=intervals[l][1]
while r<len and intervals[r][0]<=b:
# merge
intervals[l][1]=max(intervals[l][1],intervals[r][1])
b = intervals[l][1]
r+=1
res.append([a,b])
l=r
return res
if __name__ == '__main__':
# [[1,6],[8,10],[15,18]]
intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
print(merge(intervals))
# [[1,5]]
intervals = [[1, 4], [4, 5]]
print(merge(intervals))
intervals = [[1, 9], [4, 5]]
print(merge(intervals))
intervals = [[99,101],[1, 9], [4, 5]]
print(merge(intervals))


浙公网安备 33010602011771号