python 合并区间
在解决算法问题时,合并区间是一个常见的问题。给定一组区间,合并所有重叠的区间。例如,给定区间 [1,3]
, [2,6]
, [8,10]
, [15,18]
, 输出合并后的区间为 [1,6]
, [8,10]
, [15,18]
。
解决思路
为了解决这个问题,我们首先要按区间的起始位置对区间进行排序。然后我们可以遍历一次所有的区间,并将其与结果数组中的最后一个区间进行比较,从而确定是否需要合并。在比较过程中,我们需要判断两个区间是否有重叠部分,如果有,则需要合并。
示例代码
下面是用Python实现的合并区间的示例代码:
def merge(intervals):
intervals.sort(key=lambda x: x[0])
merged = []
for interval in intervals:
if not merged or merged[-1][1] < interval[0]:
merged.append(interval)
else:
merged[-1][1] = max(merged[-1][1], interval[1])
return merged
# 测试用例
intervals = [[1,3], [2,6], [8,10], [15,18]]
print(merge(intervals))
运行结果
运行以上代码,打印出合并后的区间:
[[1, 6], [8, 10], [15, 18]]
时间复杂度分析
对区间进行排序的时间复杂度为 O(nlogn),遍历区间的时间复杂度为 O(n),因此合并区间的算法总时间复杂度为 O(nlogn)。
总结
合并区间是一个常见的算法问题,通过将区间按起始位置进行排序,然后遍历一次区间进行合并,可以快速解决该问题。在解决类似问题时,我们可以借鉴这种解题思路。