您好每个人都想用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)
将最大数字相乘得到的总和大于将大数与低数相乘然后将它们相加(比较给定圆周方形是具有最大表面积的矩形)。因此,只需要计算[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是最大(偶数)数字)。
答案 1 :(得分:0)
我同意斯蒂芬的观点,将相对最大的数字乘以一个较大的总和,而不是将一个较大的数字与一个较小的数字相乘,然后将它们相加。而且你应该将数组中的连续数字乘以(1 * 2)+(3 * 4)+(5 * 6)+ ... +(99 * 100)等。
答案 2 :(得分:0)
您不需要所有组合。 在数学上,您将始终通过乘以最高可用数字来获得最高值。 因此,将高数字乘以除第二高数字之外的任何数字都是毫无意义的。
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)