Javascript 如何找到数组中第一和第二高的数字序列

Javascript 如何找到数组中第一和第二高的数字序列,javascript,arrays,algorithm,pattern-matching,series,Javascript,Arrays,Algorithm,Pattern Matching,Series,我有一个数字数组,我想从数组中找到最高的数字序列 我曾尝试从数组中获取连续序列,但这不是我要寻找的解决方案 [376639874046418744893700330733134186127856763147314032992617492498] 这是我的数组,我想在sum()时找到最高的序列 长度也最大,最大系列长度为3。 所以实际上我期待这些结果。 404641874489 如果你不明白这个问题,请询问。 第一最高系列 404641874489 第二高的是 49284498如果有帮助,请告诉我

我有一个数字数组,我想从数组中找到最高的数字序列

我曾尝试从数组中获取连续序列,但这不是我要寻找的解决方案

[376639874046418744893700330733134186127856763147314032992617492498]

这是我的数组,我想在
sum()时找到最高的序列
长度也最大,最大系列长度为3。
所以实际上我期待这些结果。
404641874489

如果你不明白这个问题,请询问。 第一最高系列
404641874489
第二高的是
49284498

如果有帮助,请告诉我。。我相信它可以被优化

var arr = [3766, 3987, 4046, 4187, 4489, 3700, 3307, 3336, 4113, 4286, 1278, 5676, 3140, 3299, 2617, 4928, 4498];
var maxLength = 3; //Maximum length of series
var curLength = 0; //Keeping track of current length

var series = []; //Series that makes maximum sum
var tmpSeries = []; 
var currentMax = 0; //Current maximum value.

findSeries();

function findSeries()
{
    var tmpMax = 0;
    for (var i = 0; i < arr.length; i++) {

        var isInc = curIncStat = (arr[i] > arr[i +1]) ? "I" : "D";

        /*Iterate till one of the condition fails.
        1. maxLength is reached
        2. sequence changes from Inc to Dec
        3. Run out of array
        */

        while(true)
        {
            //Checking for fail conditions
            if(curIncStat != isInc || curLength == maxLength || (i + 1) > arr.length)
            {
                //Checking if tmpSeries sum is greater than currentMax
                if(tmpMax >  currentMax)
                {
                    series = [];
                    series.push(tmpSeries);
                    currentMax = tmpMax;

                }

                //Resetting all values.
                tmpMax = 0;
                tmpSeries = [];
                curLength = 0;
                break;
            }

            tmpSeries.push(arr[i + curLength]);
            tmpMax += arr[i + curLength];

            curIncStat = (arr[i + curLength] > arr[i + curLength + 1]) ? "I" : "D";
            curLength++;
        }
    }
    console.log(arr)
    console.log(series);
    console.log(currentMax);
}
var-arr=[3766398740464187448937003307336411342861278567676731403299261749284498];
var maxLength=3//序列的最大长度
var curLength=0//跟踪当前长度
var系列=[]//求和最大的级数
var tmpSeries=[];
var-currentMax=0//当前最大值。
findSeries();
函数findSeries()
{
var-tmpMax=0;
对于(变量i=0;iarr[i+1])?“i”:“D”;
/*迭代直到其中一个条件失败。
1.已达到最大长度
2.从Inc到Dec的顺序变化
3.阵列耗尽
*/
while(true)
{
//检查故障条件
if(curIncStat!=isInc | | curLength==maxLength | |(i+1)>arr.length)
{
//检查tmpSeries总和是否大于currentMax
如果(tmpMax>currentMax)
{
系列=[];
系列推送(TMP系列);
currentMax=tmpMax;
}
//重置所有值。
tmpMax=0;
tmpSeries=[];
卷曲长度=0;
打破
}
tmpSeries.push(arr[i+卷曲长度]);
tmpMax+=arr[i+卷曲长度];
curIncStat=(arr[i+curLength]>arr[i+curLength+1])?“i”:“D”;
curLength++;
}
}
控制台日志(arr)
控制台日志(系列);
console.log(currentMax);
}

这是一个依赖函数生成器的解决方案,下面的方法生成所需的所有X元素序列(在您的示例中为2到3)。 该方法以一个数组作为参数,一个最小大小和一个最大大小,生成它遇到的每个大小的序列(因此,它从[37663987]开始,然后是[39874046],依此类推)

接下来,我实现了另一个小方法,它返回整数数组中具有最高和的元素,从所需的大小开始。这当然可以以更好的方式完成,但我认为在一次快照中迭代原始数组会使事情更容易管理

const input=[37663987404641874489370033073364113428612785676767314032992617492498];
/*
构建数组从左到右的所有序列,包括minSize和maxSize之间的所有大小。
*/
函数*构建序列(arr、minSize、maxSize){
for(设i=minSize;ia.reduce((a,b)=>a+b);
返回arr.filter(i=>i.length==size).sort((a,b)=>sumArray(a)console.log(highestThreeSerie,highestTwoSerie);
每个序列的长度是多少?如果没有限制,序列可以是整个数组。什么定义了一个序列?不也是一个序列吗?
37663987404641874489
对于[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17]来说,需要什么解决方案,当你回答时,为什么不再加一个值呢?还有,
当sum()和长度最高时,
-你不能同时最大化两个值。你想要两个单独的计算吗?对不起,我应该提到。最大序列长度限制是3。@Keroppimowow..我喜欢你的代码。我总有一天会到达那里:)但我不确定它是否能提供所需的简历。。或者我错了。它给出了他要求的结果,我仔细检查了结果,排序实际上是正确的:P。不管怎样,如果预期的结果不同,编辑排序就足够了,不管怎样,我不确定他想要的是最大的还是所有的对。如果这一对是理想的结果,其实很简单。就像我说的,我可能错了:)嘿。。认真地爱你的代码@谢谢,我个人更喜欢生成器方法,而不是其他需要生成的方法。。。我觉得这使代码更容易阅读:)正是。。你会推荐一本书或一个学习JS mate的网站吗?今天从您的代码中学到了一些东西。。谢谢