Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用迭代函数从数组中获取最大和?_Javascript - Fatal编程技术网

Javascript 如何使用迭代函数从数组中获取最大和?

Javascript 如何使用迭代函数从数组中获取最大和?,javascript,Javascript,大家好,我想用javascript和es6解决这个问题,问题是 如果我有一个像[1,2,3,4]这样的数组,那么我想检查每一个概率,像下面这样,并返回最大数 1--> (1*2) + (3*4) = 14 2--> (1*3) + (2*4) = 11 3--> (1*4) + (2*3) = 10 那么最大的数字是14,作为一个返回结果--->我如何使用函数做到这一点,并记住如果数组有100个数字,我如何动态地计算99个概率 注意:可能数组没有排序,可能是奇数-不仅是偶数-

大家好,我想用javascript和es6解决这个问题,问题是
如果我有一个像[1,2,3,4]这样的数组,那么我想检查每一个概率,像下面这样,并返回最大数

1--> (1*2) + (3*4) = 14
2--> (1*3) + (2*4) = 11
3--> (1*4) + (2*3) = 10
那么最大的数字是14,作为一个返回结果--->我如何使用函数做到这一点,并记住如果数组有100个数字,我如何动态地计算99个概率
注意:可能数组没有排序,可能是奇数-不仅是偶数-多谢u

将最大的数字相乘得到的结果比将大的数字与小的数字相乘然后求和得到的结果要大(比较给定的周长,正方形是表面积最大的矩形)。因此,只需计算
[0]*[1]+[2]*[3]+[4]*[5]+…
(假设数组长度为偶数):

常量数组=[4,2,1,3].sort(); 设和=0; for(设i=1;i
编辑:对于从1开始的连续数字的计算,一甚至不需要JS,总和的闭合形式是
1/3*(n-1)(4*n²-5*n)
(n是最大(偶数)。

我同意斯蒂芬的观点,将最大的数字相乘会得到比将大的数字与小的数字相乘然后求和更大的总和。而且你应该将数组中的连续数字相乘,比如(1*2)+(3*4)+(5*6)+…+(99*100)等等。你不需要所有的组合。 从数学上讲,通过将最高可用数字相乘,始终会产生最高值。 因此,将一个高的数字与第二高的数字相乘是没有意义的

const arr = [4, 3, 2, 5, 6, 7]
let sum = arr.sort().reduce((sum, val, idx) => sum += (idx % 2 !== 0) ? arr[idx - 1] * arr[idx] : 0 , 0)

你试过什么?看起来你是在要求我们为你做这项工作……我的假设是,第一个(排序)总是最大的。@Stephan Good spot!我很想把它看作是一个完整的答案。对于[1,2,3,4,5,6],它是否应该测试
1*2+3*4+5*6
(和组合)?当然,我试图解决它,但我没有得到它的逻辑,所以我在这里问程序员并不懒惰,无论如何,谢谢你@jakerellaYou可以添加更多细节,就像第一个组合(排序)总是最好的一样+1我认为您假设数组的长度始终为偶数,这可能不是真的。问题是缺少有关如何对数字进行分组的信息。我对奇数长度问题的解释是不可能的。@MohammedSaberMohammed上述函数将处理偶数或非偶数数组,尽管无论出于何种原因,如果您希望使用“仅偶数”函数,这是您的选择谢谢您的回答,你能解释一下代码吗?因为我不懂它的意思logic@MohammedSaberMohammed我添加了一些评论,如果有不清楚的地方,请让我知道谢谢你,但你能不能再次解释foreach的部分,并充分解释if语句对不起,如果我很愚蠢,因为我是这方面的新手field@MohammedSaberMohammed没关系,伙计。我可以试试,虽然有些你应该查javascript文档。sort函数接受一个回调,该回调定义了所需的排序顺序。(a,b)=>aconst arr = [4, 3, 2, 5, 6, 7] let sum = arr.sort().reduce((sum, val, idx) => sum += (idx % 2 !== 0) ? arr[idx - 1] * arr[idx] : 0 , 0)