我有一个问题,它与算法查找最长不重叠序列非常相似。唯一的区别在于,我需要找到表示最大覆盖的非重叠元组集合,其中元组长度之和是最大的(元组长度是指根据下一句中元组的定义给出的
last-first+1
)。与链接问题不同的是,我以不同的方式表示我的元组。我把我的元组表示成(first, last)
,例如,元组(3,7)
表示数字集合[3,4,5,6,7]
。(即使端点匹配,元组也可以重叠;例如,元组(2,6)
和(6,8)
重叠,因此不能同时出现在解决方案中。)例如,考虑以下按first
排序的元组集合: [(0,100), (2,50), (30,150), (60,95), (110,190), (120,150), (191,200)]
这里的最大集合将是 [(0,100), (110,190), (191,200)]
,其覆盖范围为101 + 81 + 10 = 192
。(注意,此解决方案中的元组是非重叠的。) 最简单的算法示例是什么?该算法的复杂度是多少?(如果可以在O(N)
内解决这个问题,那将非常好,但我现在不知道是否可以。)补充:回顾一下,事实证明,我在这里提出的问题等价于加权区间调度问题。这是区间调度问题的一个特例。@j_random_hacker的答案实际上是已知的加权区间调度问题的解决方案,其时间复杂度为O(N log(N))
。