leetcode合并区间

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

提示:

1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

class Solution(object):
    def merge(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: List[List[int]]
        """
        intervals.sort()
        res=[intervals[0]]
        for i in intervals[1:]:
            if res[-1][1]>=i[0]:
                res[-1][1]=max(res[-1][1],i[1])
            else:
                res.append(i)
        return res

二维数组,先按照首个数字排序(输入格式默认应该就是首个数字从小到大排序),然后进行比较就可以了

这段代码是实现合并区间的函数。下面是对代码的解释和分析:

- 定义了一个名为`Solution`的类,其中包含了一个名为`merge`的方法。
- `merge`方法接收一个二维列表`intervals`作为参数,表示需要合并的区间列表。
- 首先使用`intervals.sort()`对区间列表进行排序,按照区间的起始位置从小到大排序,这是为了方便后续的合并操作。
- 创建一个结果列表`res`,将初始的第一个区间`intervals[0]`加入其中。
- 从区间列表中的第二个区间开始迭代,通过遍历`intervals[1:]`来获取每个区间`i`。
- 判断当前结果列表`res`中的最后一个区间`res[-1]`的结束位置是否大于等于当前区间`i`的起始位置。如果是,则说明两个区间有重叠部分。
- 在有重叠的情况下,更新结果列表`res`中最后一个区间的结束位置,将其设置为当前区间`i`的结束位置和原始区间结束位置的较大值。
- 如果没有重叠,则将当前区间`i`直接添加到结果列表`res`中作为一个新的区间。
- 循环遍历完所有的区间之后,返回最终的结果列表`res`。

该函数的目的是将重叠区间进行合并,得到不重叠的区间列表。通过对原始区间列表进行排序,并从头开始遍历进行合并操作,可以得到最大化合并后的区间。这样可以减少区间的数量,提高代码的执行效率。

你可能感兴趣的:(算法,数据结构,python,人工智能,leetcode)