我有一个如下所示的数组:
[1,2,3,4,5,6,8,10,12,13,14,15,20,21,22,23,24,25,26,27,28,29,30]
其中一个发现序列的最高计数为:10
我的目标是遍历数组并识别数字序列,然后找出存在的最高序列的长度。
因此,基于上面的数组,最长序列的长度将是“10”
有没有人知道找到这个快速简便的脚本?
答案 0 :(得分:4)
好的,我想我找到了一个非常简短的方法(for循环只有1行):
var arr = [1,2,3,4,5,6,8,10,12,13,14,15,20,21,22,23,24,25,26,27,28,29,30];
var res = new Array();
res[0] = 0;
for(var i=1;i<arr.length;i++) res[i] = (arr[i] == arr[i-1] + 1) ? (res[i-1] + 1) : 0;
var maxLength = Math.max.apply({},res);
这给你(10)作为结果。如果你需要(11)(这更有意义)在for循环中将0改为1.
jsFiddle链接:http://jsfiddle.net/gEzzA/8/
答案 1 :(得分:0)
你不需要jQuery。
function longestSeq(arr) {
var len = 0, longestLen = -1, prev = null;
for (var i = 0; i < arr.length; ++i) {
if (prev == null || arr[i] - 1 === prev)
++len;
else {
if (len > longestLen) longestLen = len;
len = 1;
}
}
return longestLen > len ? longestLen : len;
}
这样做是为了跟踪自从看到“休息”以来已经过了多长时间。每次看到休息时,它会检查到目前为止最长的时间是否比最后一次良好运行时短。
答案 2 :(得分:0)
这是伪代码中的解决方案......
首先,设置另一个具有相同数量元素并初始化为零的数组,以用作计数器......
Array01:=[1,2,3,4,5,6,8,10,12,13,14,15,20,21,22,23,24,25,26,27,28,29,30]
Array02:=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
现在填写计数器的逻辑......
FOR i:=0 TO LastElement DO
WHILE (Array01[i+1]-Array01[i]=1) AND (i<LastElement) DO Inc(Array02[i]);
现在扫描谁拥有最高的序列分数......
which:=0; Value:=Array02[0];
FOR i:=0 TO LastElement DO
IF Array02[i]>Value THEN BEGIN Value:=Array02[i]; Which:=i; END;
因此,在此结束时,最高序列由数组元素“哪个”保持,计数为“值”!