如何检测并合并重叠数值范围?
数值范围重叠检测与合并方案
有没有可用工具包?
日常开发里没必要特意找第三方工具包,自己写几行逻辑就能搞定。如果确实想省事儿,Python里的intervaltree库可以直接处理区间的合并、查询,但这类场景自己实现更灵活,也不用额外引入依赖。
正确实现思路
不管用什么语言,核心逻辑都是通用的,按以下步骤走就行:
- 解析输入:把输入字符串拆分出单个元素,将每个元素转换为「起始-结束」的区间格式。单个数字(比如45、2100)就转成起始和结束值相同的区间(如
(45,45))。 - 排序区间:把所有区间按「起始值」从小到大排序,这是合并重叠区间的关键前提。
- 合并重叠/相邻区间:
- 初始化空的结果列表,先把第一个区间放进去。
- 从第二个区间开始遍历,拿当前区间和结果列表最后一个区间对比:
- 如果当前区间的起始值 ≤ 最后一个区间的结束值,说明两者重叠或相邻,就把最后一个区间的结束值更新为两者的最大值。
- 如果当前区间的起始值 > 最后一个区间的结束值,说明无重叠,直接把当前区间加入结果列表。
- 格式化输出:把合并后的区间转成字符串格式,起始和结束值相同的区间只写数字,否则写「起始-结束」,最后用逗号拼接所有结果。
拿你给出的示例走一遍流程:
- 解析后得到区间:
(10,1000),(15,350),(50,1500),(2100,2100),(1700,1800),(45,45),(40,40),(145,145),(2,1300) - 排序后:
(2,1300),(10,1000),(15,350),(40,40),(45,45),(50,1500),(145,145),(1700,1800),(2100,2100) - 合并后得到:
(2,1500),(1700,1800),(2100,2100) - 格式化输出就是:
2-1500,1700-1800,2100
内容的提问来源于stack exchange,提问作者tomooboy
相关产品推荐
相关产品推荐

