链接:56. 合并区间 - 力扣(LeetCode)
题目描述:
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 :
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
解题思路:
1.将数组按元素中第一个值排序
2.result数组中存放最终结果
3.遍历数组,判断数组中元素的区间起始与结果数组中保存的最后一个区间末尾进行比较
- 起始元素大于结果数组区间末尾,将这个区间加入到结果数组中
- 起始元素小于或等于结果数组区间末尾,判断元素的区间末尾,若仍然小于,表示该区间已包含在内,若大于,则更新结果区间的末尾
代码实现:
class Solution:def merge(self,intervals):result = []intervals.sort(key = lambda x : x[0])for interval in intervals:if not result or result[-1][1] < interval[0]:result.append(interval)else:result[-1][1] = max(result[-1][1],interval[1])return result