我有一个属性为“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/