如何基于递增序列提取区间,忽略左重叠并合并右重叠?
问题:提取并合并符合规则的递增序列区间
示例输入
mylist = [2, 7, 8, 11, 7, 9, 10, 15, 22, 30, 32]
规则说明
- 从2到11为递增序列,需提取其最小最大值组成区间
[2, 11] - 从7到10为递增序列,但该区间(7到10)包含于已提取的第一个区间,故忽略
- 从15到32为递增序列,提取其最小最大值组成区间
[15, 32]
最终结果应为:[[2, 11], [15, 32]]
尝试的代码
final = [] mi = mylist[0] ma = mylist[1] for i, j in zip(mylist, mylist[1:]): if i < j: ma = j elif i > j: mi = i continue elif mi == ma: continue final.append([mi, ma])
补充场景说明
- 对于列表
[5, 8, 10, 3, 4, 5, 7],结果应为[[5,10]],因[3, 7]的起始点在[5, 10]之后,即使重叠也忽略 - 对于列表
[5, 8, 10, 8, 9, 12],结果应为[[5,12]],即[5,10] ∪ [8, 12],因[8, 12]与[5, 10]右重叠,需合并 - 对于列表
[1, 3, 5, 4, 3, 2, 1],结果应为[[1, 5]],因4到1为递减序列,需忽略
需求
不需要Python代码,仅需解决该问题的算法或正确思路。
内容的提问来源于stack exchange,提问作者VERBOSE
相关产品推荐
相关产品推荐

