繁体   English   中英

如何通过迭代函数从数组中获取最大和?

[英]How To Get The Largest Sum From An Array With Iteration Funcrtion?

大家好,我想用 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 个概率注意:也许数组没有排序并且它可能是一个奇怪的不仅甚至谢谢你

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

const array = [4,2,1,3].sort();
let sum = 0;
for(let i = 1; i < array.length; i += 2)
  sum += array[i - 1] * array[i];

编辑:对于从 1 开始的连续数字的计算,甚至不需要 JS,总和的封闭形式是1/3 * (n - 1)(4*n² - 5*n) (n 是最大的(偶数)个)。

我同意 Stephen 的观点,将最大的数字相乘得到的总和比将一个大的数字与一个小的数字相乘然后求和要大。 而且您还应该将数组中的连续数字相乘,例如 (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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM