【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 

https://leetcode.cn/problems/merge-intervals/solutions/5411/pai-xu-by-powcai/

你可能感兴趣的:(LeetCode,Python,leetcode,算法)