举个例子:
有如下三个区间:
[
[1,100],
[50,200],
[300,400],
... //可以更多
]
现在需要一个算法来合并区间, 合并之后是:
[
[1,200],
[300,400],
...
]
就是说重合的区间是需要合并的, 这样的算法该怎么写? 大神们给点思路吧
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
1.类似于插入排序。
2.把[1,100]插入新数组
3.插入[50,200]是,判断50是否小于100且大于1.
没有小数且数值较小的情况,最简单的办法就是打表。做一个,读入数据的时候直接把区间之间的坐标赋值为true,输出的时候再扫描一遍表里面的坐标就行了。
不打表的话,双重循环就行了,比较任意两个线段,一旦交叉直接合并就行了。
比想象中烦一点, 因为是乱序的, 区间可能各种交叉
算法思路:
对区间按头排序(升序)
从第一区间起取当前拟合并区间为a,
取下一区间为b(如果没有b了则输出a,退出)
如果a的尾 > b 的头 ,则合并为 a,且跳到3,
否则输出a,把b作为a,且跳到3
这个适用于很多个区间的合并。