Javascript 查找数组中的数字序列并通知最大数字

Javascript 查找数组中的数字序列并通知最大数字,javascript,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 有没有人知道可以快速轻松地找到这个脚本?您不需要jQuery来完成这个任务 function longestSeq(arr) { var len = 0, longestLen = -1, pr

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

[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


有没有人知道可以快速轻松地找到这个脚本?

您不需要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;
}

这样做的目的是记录一次休息已经有多长时间了。每次看到中断时,它都会检查到目前为止最长的中断是否比上一次正常运行的时间短。

这不需要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;
}

这样做的目的是记录一次休息已经有多长时间了。每次看到中断时,它都会检查到目前为止最长的中断是否比上一次正常运行的时间短。

好的,我想我找到了一种非常短的方法,只需为for循环设置一行:

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


jsiddle-link:

好的,我想我找到了一个非常简单的方法,只需for循环一行:

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


JSIDLE链接:

以下是伪代码中的解决方案

首先,使用相同数量的元素设置另一个数组,并将其初始化为零,以用作计数器

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]);
现在填写计数器的逻辑

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]);

因此,在这个结尾,最高的序列由数组元素持有,其计数为Value

以下是伪代码中的解决方案

首先,使用相同数量的元素设置另一个数组,并将其初始化为零,以用作计数器

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]);
现在填写计数器的逻辑

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]);

因此,在这个结尾,最高的序列由数组元素持有,其计数为Value

最长的序列不是1120-30的长度吗?这听起来像是家庭作业。你尝试过什么吗?2,4,6是否被归类为1序列?顺便问一下,你会接受任何答案吗;最长的序列不是1120-30的长度吗?这听起来像是家庭作业。你尝试过什么吗?2,4,6是否被归类为1序列?顺便问一下,你会接受任何答案吗;