【LeetCode】56. 合并区间

时间: 2023-12-21 admin 维修知识

【LeetCode】56. 合并区间

【LeetCode】56. 合并区间

1 问题

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

2 答案

自己的写的不对,没有排序,不能直接append到new(res)

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:new = []for i in range(len(intervals)-1):if intervals[i][1] <= intervals[i+1][0]:new.append([intervals[i][0],intervals[i+1][1]])else:new.append(intervals)return new

修改

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort()new = [intervals[0]]for i in range(1, len(intervals)):if new[-1][1] >= intervals[i][0]:new[-1][1] = max(new[-1][1], intervals[i][1])else:new.append(intervals[i])return new

官方解,思路相似,排序,关键的是对res进行修改

class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:if not intervals: return []intervals.sort()res = [intervals[0]]for x, y in intervals[1:]:if res[-1][1] < x:res.append([x, y])  else:res[-1][1] = max(y, res[-1][1])  # 修改 res 最后一个元素即可,这里要取一个最大值,因为存在[[1,4],[2,3]]这样的情况return res 

/