前言
题目:以数组 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].
思路:首先把所有区间按第一个元素升序排序,保证遍历时后面的区间开始数一定在前面区间的前面。然后逐步遍历数组区间,与res的最后一个区间进行比较即可,如果遇到res[-1][1]<遍历的区间开始数字,则直接加入即可,否则将res[-1][1]修改为俩者中的较大值。
代码如下(python):
class Solution:
def merge(self, intervals):
res = []
intervals.sort(key=lambda x:x[0])
for i in range(len(intervals)):
if i == 0:
res.append(intervals[i])
elif res[-1][1] < intervals[i][0]:
res.append(intervals[i])
else:
res[-1][1] = max(res[-1][1],intervals[i][1])
return res
a = Solution()
n = int(input()) #输入区间个数
intervals = [[] for i in range(n)]#创建二维列表
for i in range(n):
intervals[i] = list(map(int,input().split(',')))#输入矩阵参数,以','分开两个数
print(intervals)
print(a.merge(intervals))
运行示例
第一行输入为区间个数,后面每行输入如 5,8 这样的区间