2017-10-28 96 views
1

給定一個整數數組,找到具有最大產品並返回該產品的一對相鄰元素。給定一個整數數組,找到具有最大產品的相鄰元素對並返回該產品

,這裏是我的代碼

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

回答

2

你可以用一個非常大的負值開始,而不是零。

var p = -Infinity; 
2

您正在初始化變量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]));

0

你可以嘗試創建長度的函數內一個新的數組(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])); 
0

這是一個非常簡單的實現,沒有使用任何額外的變量(實際上更少),也沒有特殊的值。只是簡單的邏輯。

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。這樣,所有其他產品都與本產品進行比較。休息很簡單。

希望它有幫助。 :)

相關問題