给定一个整数数组,找到具有最大产品的相邻元素对并返回该产品

给定一个整数数组,找到具有最大产品的相邻元素对并返回该产品

问题描述:

给定一个整数数组,找到具有最大产品并返回该产品的一对相邻元素。给定一个整数数组,找到具有最大产品的相邻元素对并返回该产品

,这里是我的代码

function adjacentElementsProduct(inputArray) { 
var arr = inputArray; 
    var x=0; 
    var y=0; 
    var p=0; 
    for(var i=0;i<arr.length;i++){ 
    x=arr[i]; 
    y=arr[i+1]; 
    if(x*y>p){ 
    p=x*y; 
    }; 
    }; 
return p; 
}; 

问题是所有的测试工作正常,但与如所附照片 谁能帮助表明,它的负积阵列除了..和感谢推进

enter image description here

+0

该循环的最后一次迭代将'y'设置为'arr [arr.length]',这不是一个有效的索引。 – rici

你可以用一个非常大的负值开始,而不是零。

var p = -Infinity; 

您正在初始化变量p为零。这意味着任何小于该值的乘法值都不被接受。相反,它设置为最小可能的整数值:

var p = Number.MIN_SAFE_INTEGER; 

function adjacentElementsProduct(inputArray) { 
 
    var arr = inputArray; 
 
    var x = 0; 
 
    var y = 0; 
 
    var p = Number.MIN_SAFE_INTEGER; 
 
    for (var i = 0; i < arr.length; i++) { 
 
    x = arr[i]; 
 
    y = arr[i + 1]; 
 
    if (x * y > p) { 
 
     p = x * y; 
 
    }; 
 
    }; 
 
    return p; 
 
}; 
 

 
console.log(adjacentElementsProduct([-23, 4, -3, 8, -12]));

你可以尝试创建长度的函数内一个新的数组(arr.length-1)和附加产品与这个新阵列相邻的数字。然后找到数组中最大的数字并将其返回。这将解决负面产品的问题。

function adjacentElementsProduct(inputArray) { 
    var arr = inputArray; 
    var prodArr[]; 
    var p; 
    for (var i = 0; i < arr.length-1; i++) { 
    prodArr[i] = arr[i]*arr[i+1]; 
    }; 
    for (j=prodArr.length; j--){ 
    if (prodArr[j] > p) { 
     p = prodArr[j]; 
    }; 
    return p; 
}; 

console.log(adjacentElementsProduct([-23, 4, -3, 8, -12])); 

这是一个非常简单的实现,没有使用任何额外的变量(实际上更少),也没有特殊的值。只是简单的逻辑。

function adjacentElementsProduct(inputArray) { 
 
    var c =inputArray[0]*inputArray[1]; 
 
    var p = c; 
 
    for(var i=1;i<inputArray.length;i++){ 
 
     console.log(c); 
 
     var c=inputArray[i]*inputArray[i+1]; 
 
     if(c > p){ 
 
      p=c; 
 
     }; 
 
    }; 
 
    return p; 
 
}; 
 
console.log("minimum product = " + adjacentElementsProduct([-23,4,-3,8,-12]));

我所做的是,初始化变量C(现有产品)与阵列的前两个元素的乘积。然后我声明变量p并将其初始化为c。这样,所有其他产品都与本产品进行比较。休息很简单。

希望它有帮助。 :)