我正在尝试找到解决以下问题的最佳方法。通过最好的方式,我的意思是不那么复杂。
作为输入元组列表(开始,长度),如:
[(0,5),(0,1),(1,9),(5,5),(5,7),(10,1)]
每个元素通过它的start和length表示一个序列,例如 (5,7) 等价于序列(5,6,7,8,9,10,11)
- 一个以 5 开头的 7 个元素的列表。可以假设元组是按start
元素排序的。
输出应返回表示最长连续序列的元组的非重叠组合。这意味着,解决方案是范围的子集,没有重叠和间隙,并且可能是最长的——尽管可能有多个。
例如对于给定的输入,解决方案是:
[(0,5),(5,7)]
相当于(0,1,2,3,4,5,6,7,8,9,10,11)
它是回溯解决这个问题的最佳方法吗?
我对人们可能提出的任何不同方法感兴趣。
此外,如果有人知道这个问题的正式参考或另一个类似的参考,我想获得参考。
顺便说一句 - 这不是家庭作业。
编辑
只是为了避免一些错误,这是另一个预期行为的例子
[(0,1),(1,7),(3,20),(8,5)]
对于像正确答案这样的输入[(3,20)]
等效于长度为 20 的 (3,4,5,..,22)。收到的一些答案将[(0,1),(1,7),(8,5)]
等效于 (0,1,2,...,11,12)作为正确答案。但是最后一个答案是不正确的,因为它比 短[(3,20)]
。