思路
重叠性质:考虑两个区间[x1,y1] 和 [x2,y2] 重叠,等价于y1≥x2
所以我们对所有区间的左端点xi排序,从左到右遍历,判断对应的yi 是否大于等于 下一个区间的左端点xi+1 ,若重叠则合并区间yi=max(yi,yi+1) , 如此往复合并所有可能的区间 ,直到yi<xi+1 ,区间断开。
为什么要对左端点排序?贪心
对左端点排序后考虑任意一个相邻的区间[xi,yi],[xi+1,yi+1] ,它满足,选中[xi,yi]的情况下,xi≤xi+1且xi,xi+1他俩离的最近。这等价于yi 和xi+1 离的最近,那么重叠性质yi≥xi+1 最容易被满足。
给定一个二维整数数组 intervals,其中 intervals[i] = [start_i, end_i] 表示一个闭区间。
请将所有存在重叠部分的区间进行合并,返回合并后的区间集合。返回结果中的任意两个区间均不重叠,且所有区间的并集与原区间集合的并集相同。
约束条件
第一行为一个整数 n ,代表数组 intervals的长度。 接下来的n行,每行有两个整数starti,endi,代表第i个区间。
每行输出一个区间,区间的数字以空格分隔。每个区间以starti升序输出。
输入
5
1 4
2 3
5 8
7 9
10 12
输出
1 4
5 9
10 12
说明
输入共 5 个区间:[1,4]、[2,3]、[5,8]、[7,9]、[10,12]。
先看前两个区间,[2,3] 完全落在 [1,4] 内,所以合并后仍为 [1,4]。
接着 [5,8] 与 [7,9] 有重叠部分 [7,8],合并为 [5,9]。
最后的 [10,12] 与 [5,9] 不重叠,单独保留。
合并结果按左端点升序为 [1,4]、[5,9]、[10,12]。
输入
4
1 3
3 5
5 6
8 10
输出
1 6
8 10
说明
输入区间为 [1,3]、[3,5]、[5,6]、[8,10]。
题目规定端点碰到一起也视为重叠,因此 [1,3] 与 [3,5] 会在端点 3 处重叠,继续与 [5,6] 在端点 5 处重叠,三个区间合并为 [1,6]。
[8,10] 与前一个区间的右端点 6 没有接触,单独保留。
所以结果为 [1,6]、[8,10]。
输入
1
0 10000
输出
0 10000
说明
只有一个区间 [0,10000],它覆盖了本题端点允许的全部范围。
因为没有其他区间需要合并,所以结果就是 [0,10000]。
这也是对单区间边界情况的验证。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册