我有一个属性为“offset”和“length”的“range”对象数组,如下所示。假设它将按“偏移量”升序排序。
范围数组包含:

Offset        Length     Index
-------       -------    -------
100           10         0
110           2          1
112           5          2
117           3          3
300           5          4
305           5          5
400           5          6
405           10         7
415           2          8
417           4          9
421           7          10
428           1          11
429           6          12
500           4          13
504           9          14

在这种情况下,相邻的子序列将是:
Sequence #1 indices: 0, 1, 2, 3
Sequence #2 indices: 4, 5
Sequence #3 indices: 6, 7, 8, 9, 10, 11, 12  <-- (longest!!)
Sequence #4 indices: 13, 14

假设只有一个最长的序列在遍历这些项时,我想为每个连续的序列创建一个新数组,并返回最大的数组,但这似乎是次优的。有更好的办法吗我在C#2.0中实现函数应返回包含最长子序列元素的数组,或返回原始数组中最长子序列的起始和结束索引。
谢谢大家来试试这个。

最佳答案

该问题与邻接子序列问题等无关,是一个简单的问题,可以在O(n)时间内求解在我看来,数组所表示的“字符串”并不重叠,因此有一个非常简单的算法:将左食指放在第一行,然后向下运行右食指,只要你在一个连续的序列内。当序列结束时,存储长度和起始位置。然后重复这个每当找到比上一条记录更长的序列时,就更新起始位置。

关于c# - 最长连续子序列算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/655817/

10-12 16:33
查看更多