查找数组中的数字序列并提醒最高编号

时间:2011-07-20 21:39:36

标签: javascript

我有一个如下所示的数组:

[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”

有没有人知道找到这个快速简便的脚本?

3 个答案:

答案 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;

因此,在此结束时,最高序列由数组元素“哪个”保持,计数为“值”!