给定一个整数数组,找到具有最大产品的相邻元素对并返回该产品
问题描述:
给定一个整数数组,找到具有最大产品并返回该产品的一对相邻元素。给定一个整数数组,找到具有最大产品的相邻元素对并返回该产品
,这里是我的代码
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;
};
问题是所有的测试工作正常,但与如所附照片 谁能帮助表明,它的负积阵列除了..和感谢推进
答
你可以用一个非常大的负值开始,而不是零。
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。这样,所有其他产品都与本产品进行比较。休息很简单。
希望它有帮助。 :)
该循环的最后一次迭代将'y'设置为'arr [arr.length]',这不是一个有效的索引。 – rici