leetcode56.合并区间

mac2025-10-17  6

1.题目描述

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2:

输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

2.解题思路

按每个区间的第一个元素由小到大排序,依次比较数组中的前后区间,如果后面区间的头部小于等于前面区间的尾部,则需要合并

弹出前面那个 i 区间,用新生成的区间来更新后面的区间,新生成区间的头部是前后两个区间头部较小值,一定是弹出的区间的头部,因为所有区间按由小到大的顺序排列。新生成区间的尾部一定是前后两个区间尾部较大值

3.代码实现

class Solution(object): def merge(self, intervals): # 正向排序,保证每次把更小的区间弹走 s = sorted(intervals, key=lambda item:item[0]) i = 0 while i+1 <= len(s)-1: #如果后面区间的头部小于等于前面区间的尾部 if s[i+1][0] <= s[i][1]: # 弹出前面那个区间 delet = s.pop(i) # 用新生成的区间来更新后面的区间 s[i][0] = delet[0] # s[i][1]已经是下一个节点的值了,因为前一个已经被弹出去了 s[i][1] = max(delet[1], s[i][1]) else: i += 1 return s

 

最新回复(0)