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序列?顺便问一下,你会接受任何答案吗;