查找数组中最大的相邻产品(JavaScript)

时间:2017-07-04 05:29:32

标签: javascript arrays algorithm spread-syntax

我正在尝试了解以下解决方案,以查找任何给定阵列中最大的相邻产品。

示例:

m43

JS中的可能解决方案:

 For inputArray = [3, 6, -2, -5, 7, 3], the output should be
 adjacentElementsProduct(inputArray) = 21.

 7 and 3 produce the largest product.

我很难理解两件事:

  1. 三个点究竟做了什么以及如何将其传递到函数中?有没有办法以更容易理解的方式写这个?我知道这是ES6中的“扩展语法”功能,但仍然无法完全理解。

  2. 为什么我们插入“1”作为切片的参数?我的第一个是输入“0”,因为我们想从头开始,然后遍历所有内容,看看哪个相邻产品是最大的。

  3. 我很感激任何建议,链接和解释。

    感谢。

    干杯!

3 个答案:

答案 0 :(得分:1)

var biggestProduct =  inputArray[0] *  inputArray[1];

for (i=0;  i<inputArray.length-1 ; ++i) 
{
  console.log(biggestProduct)
  if   ((inputArray[i] * inputArray[i+1] ) > biggestProduct) 
  { 
    biggestProduct = inputArray[i]  *  inputArray[i+1] 
  }
}
return biggestProduct;

注意:我已经声明了一个变量,该变量包含2个具有索引号的输入数组,然后启动for循环,以其索引号指示输入数组,这样他就将抛出该数组的所有索引号(一个他们中的一个加起来,这样他们的价值就不会相同)。在代码末尾,您具有if语句。

答案 1 :(得分:0)

<强> 1。三个点究竟做了什么以及如何将其传递到函数中?有没有办法以更容易理解的方式写这个?我知道这是某种&#34;传播&#34; ES6中的功能,但仍然无法完全理解。

Math#max需要一个数字列表作为参数,map会生成一个数组。 spread syntax用于将要扩展的数组转换为参数列表。

&#13;
&#13;
const arr = [1, 2, 3];

console.log('max on array', Math.max(arr));

console.log('max on list of parameters', Math.max(...arr));
&#13;
&#13;
&#13;

在这种情况下,您可以使用Function#apply将数组转换为参数列表。然而,我发现它的可读性较差。

&#13;
&#13;
const arr = [1, 2, 3];

console.log(Math.max.apply(Math, arr));
&#13;
&#13;
&#13;

<强> 2。为什么我们插入&#34; 1&#34;作为切片的论据?我的第一个是输入&#34; 0&#34;,因为我们想从头开始,然后遍历所有内容,看看哪个相邻产品是最大的。

让我们分解2个数组的迭代顺序。

[3, 6, -2, -5, 7, 3] // inputArray
[6, -2, -5, 7, 3] // inputArray.slice(1)

现在每次inputArray.slice(1)的迭代:

x: 6, i = 0, arr[0] = 3
x: -2, i = 1, arr[1] = 6
x: -5, i = 2, arr[2] = -2

由于inputArray.slice(1)数组从inputArray的第2个元素开始,因此索引(i)指向inputArray的第1个元素。结果是一组2个相邻数字的乘积。

答案 2 :(得分:0)

您可以按照以下步骤进行操作;

&#13;
&#13;
function getNeigboringMaxProduct([x,...xs], r = -Infinity){
  var p = x * xs[0];
  return xs.length ? getNeigboringMaxProduct(xs, p > r ? p : r)
                   : r;
}

var arr = [3, 6, -2, -5, 7, 3],
    res = getNeigboringMaxProduct(arr);
console.log(res);
&#13;
&#13;
&#13;