2017-02-27 84 views
2

我得到了一個問題:如何找到數組中最高的三個數字?

給定一個arrayOfInts,找到你可以從三個 整數獲取highestProduct。

輸入:var a = [1,7,9,2];預期輸出:7 * 9 * 2 = 126

我們將如何解決這個問題?我寫了代碼但徒勞無功。

function highestProductIntegers(a){ 
    var h1, h2,h3; //three highest number pointers. 

    a.forEach(function(val, index){ 
    if(index=0){ 
     h1 = val; //assign the first element to h1 (Highest 1) 
    } 

    h2 = val; //second to h2 

    if(val > h1){ //if second is greater than h1 make it h1 || h2 || h3 
     h3 = h2; 
     h2 = h1; 
     h1 = val; 
    } 
    else if(val<h1 && val > h2) //keep comparing for all elements. 
     h2 = val; 
    else if(val < h1 && val < h2) 
     h3 = val; 
    else if(val < h1 && val < h2 && val > h3) 
     h3=val; 
    }); 

    return h1*h2*h3; 
} 

有沒有更簡單或有效的方法來解決這個問題?

+0

排序然後乘以前3個數字。乘法的特性是這樣的,你不需要比較產品。最大的數字是最大的產品。 – Forklift

+2

這個問題比看起來更難:請注意,下面的答案都不適用於測試用例'[-50,-10,1,2,3]'。 –

+0

@JeffBowman是的,我已經評論了有關事實的簽名答案可能與您的意見有關。 – SaidbakR

回答

9

三個簡短的步驟。

  • 按降序對它們進行排序。
  • 將其分片得到三個(最高)整數
  • 使用reduce函數將其乘法並得到結果。

var a = [17, 1, 7, 9, 2, 5, 9, 15, 12, 44], 
 
    r = a.sort((a, b) => b - a).slice(0, 3).reduce((a, b) => a * b); 
 
    console.log(r);

+0

你能解釋一下代碼中發生了什麼嗎?你爲什麼排序,分割和減少?我試圖學習切片和減少,會有幫助! @親愛的用戶 – TechnoCorner

+0

@TechnoCorner它是固定的。 –

+0

我知道這是一個業餘愛好者的問題。爲什麼我們需要做功能(a,b){return b-a}?爲什麼我們不能使用regualr array.sort()? – TechnoCorner

0
function highestProductIntegers(array){ 
array.sort(function(i,k){return k-i;}); 
return array[0]*array[1]*array[2]; 
} 
+4

它應該返回k-i而不是k-1 –

相關問題