leetcode hot100 合并区间

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] 可被视为重叠区间。

import copy

class Solution(object):

def merge(self, intervals):

"""

:type intervals: List[List[int]]

:rtype: List[List[int]]

"""

intervals_result = []

intervals.sort(key = lambda x:x[0])

print(intervals)

intervals_iter = copy.deepcopy(intervals)

for i , interval in enumerate(intervals_iter):

if i==0:

intervals_result.append(interval)

待处理0

if interval[0]<=intervals_result[-1][1]:

interval_merge = [intervals_result[-1][0],max(intervals_result[-1][1],intervals[i][1])]

if len(intervals_result)>0:

intervals_result.pop()

intervals_result.append(interval_merge)

else:

intervals_result.append(interval)

return intervals_result

关键在于找到合并的条件是先按照start排序,然后看上一个的end有没有比这一个的start大,如果大的话就合并(包括两种情况,一个是这一个的start和end都比上一个的end小,一个是这一个的start小,end大)

相关推荐
聆风吟º2 分钟前
【顺序表习题|图解|双指针】合并两个有序数组 + 训练计划 I
c语言·数据结构·c++·经验分享·算法
wa的一声哭了5 分钟前
矩阵分析 方阵幂级数与方阵函数
人工智能·python·线性代数·算法·自然语言处理·矩阵·django
菩提祖师_8 分钟前
基于MATLAB的心电信号处理与心律异常检测算法设计
算法·matlab·信号处理
foundbug99913 分钟前
用ode45求解悬臂梁的动力学方程,得到其变形
算法
linsa_pursuer14 分钟前
最长连续序列
java·数据结构·算法·leetcode
wa的一声哭了15 分钟前
矩阵分析 单元函数矩阵微积分和多元向量值的导数
linux·c语言·c++·线性代数·算法·矩阵·云计算
ZPC821015 分钟前
FANUC Karel TCP SERVER
算法·机器人
橘颂TA18 分钟前
【剑斩OFFER】算法的暴力美学——两两交换链表中的结点
数据结构·算法·结构与算法
linsa_pursuer33 分钟前
移动零算法
java·算法
小宇的天下38 分钟前
Calibre 工具支持多种几何版图格式。
算法