在 Python 中合并区间
pythonserver side programmingprogramming更新于 2025/11/18 23:40:17
假设我们有一个区间集合,我们必须合并所有重叠的区间。因此,如果区间为 [[1,3], [2,6], [8,10], [15,18]],则合并后的区间将为 [[1,6],[8,10],[15,18]]。这是因为有两个区间重叠,区间为 [1,3] 和 [2,6],它们被合并为 [1,6]
让我们看看步骤 −
- 如果区间列表长度为 0,则返回一个空白列表
- 使用快速排序机制对区间列表进行排序
- stack := 一个空栈,并将 intervals[0] 插入到栈中
- for i in range 1 to length of intervals – 1
- last_element := 堆栈顶部元素
- 如果 last_element 的结尾 >= intervals[i] 的第一个元素,则
- last_element 的结尾 = intervals[i] 结尾的最大值,以及 last_element 的结尾
- 从堆栈弹出元素
- 将 last_element 推入堆栈
- 否则将 intervals[i] 推入堆栈
- 返回 stack
让我们看看下面的实现以便更好地理解 −
示例
class Solution(object): def merge(self, intervals): """ :type intervals: List[Interval] :rtype: List[Interval] """ if len(intervals) == 0: return [] self.quicksort(intervals,0,len(intervals)-1) #for i in intervals: #print(i.start, i.end) stack = [] stack.append(intervals[0]) for i in range(1,len(intervals)): last_element= stack[len(stack)-1] if last_element[1] >= intervals[i][0]: last_element[1] = max(intervals[i][1],last_element[1]) stack.pop(len(stack)-1) stack.append(last_element) else: stack.append(intervals[i]) return stack def partition(self,array,start,end): pivot_index = start for i in range(start,end): if array[i][0]<=array[end][0]: array[i],array[pivot_index] =array[pivot_index],array[i] pivot_index+=1 array[end],array[pivot_index] =array[pivot_index],array[end] return pivot_index def quicksort(self,array,start,end): if start<end: partition_index = self.partition(array,start,end) self.quicksort(array,start,partition_index-1) self.quicksort(array, partition_index + 1, end) ob1 = Solution() print(ob1.merge([[1,3],[2,6],[8,10],[15,18]]))
输入
[[1,3],[2,6],[8,10],[15,18]]
输出
[[1, 6], [8, 10], [15, 18]]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

