合并区间问题的多语言解决方案
摘要
在本文中,我们将探讨解决“合并区间”问题的多种算法和编程语言实现。这个问题要求我们找出给定区间集合中所有重叠区间,并合并它们,返回一个不重叠的区间数组。我们将分析几种不同的算法,并提供 Python、Java 和 C++ 的实现。
1. 问题描述
给定一个表示若干个区间集合的数组 intervals
,其中单个区间为 intervals[i] = [starti, endi]
。任务是合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
2. 输入和输出格式
- 输入:二维整数数组
intervals
,其中每个子数组包含两个整数[starti, endi]
。 - 输出:二维整数数组,合并后的不重叠区间数组。
3. 示例
- 示例 1:
intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
- 示例 2:
intervals = [[1,4],[4,5]]
输出:[[1,5]]
4. 约束条件
1 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= starti <= endi <= 10^4
5. 算法分析
- 排序 + 贪心:首先根据区间的起始位置对区间进行排序。然后遍历排序后的区间,使用贪心算法合并重叠的区间。
6. 多语言实现
我们将使用 Python、Java 和 C++ 来实现排序 + 贪心算法。
Python 实现
def merge(intervals):
if not intervals:
return []
# 根据区间的起始位置进行排序
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for current in intervals:
# 如果当前区间可以合并到已存在的区间中,则合并
if current[0] <= merged[-1][1]:
merged[-1][1] = max(merged[-1][1], current[1])
else:
merged.append(current)
return merged
# 示例
print(merge([[1,3],[2,6],[8,10],[15,