2017-04-20 61 views
0

此時函數確實返回第二大數,但我不確定它爲什麼不適用於負數?在函數中包含負數以查找數組中的第二大整數

function findSecondLargeNumber(arr) { 
 

 
    var firstLargeNum = 0, 
 
    secondLargeNum = 0; 
 

 
    for (var i = 0; i < arr.length; i++) { 
 
    if (firstLargeNum < arr[i]) { 
 
     secondLargeNum = firstLargeNum; 
 
     firstLargeNum = arr[i]; 
 
    } else if (secondLargeNum < arr[i]) { 
 
     secondLargeNum = arr[i]; 
 
    } 
 
    } 
 
    return secondLargeNum; 
 
} 
 

 
console.log(findSecondLargeNumber([1, 4, 5, 6])) //returns 5 
 
console.log(findSecondLargeNumber([-1, -2])) //returns 0 not -1

+4

???由於負數都小於零? – Pointy

+1

將你的兩個變量初始化爲'Number.NEGATIVE_INFINITY',它應該可以工作。 – Pointy

+0

@Pointy,但答案應該基於數組中的值...不是? –

回答

1

上添加名爲testVal和math.abs你是罰款

function findSecondLargeNumber(arr){ 
 
    
 
     var firstLargeNum = 0, 
 
      secondLargeNum = 0; 
 
    
 
     for(var i=0; i<arr.length; i++){ 
 
     var testVal = Math.abs(arr[i]); 
 
     if(firstLargeNum < testVal) { 
 
      secondLargeNum = firstLargeNum; 
 
      firstLargeNum = arr[i];   
 
     } else if(secondLargeNum < testVal){ 
 
      secondLargeNum = arr[i]; 
 
     } 
 
     } 
 
     return secondLargeNum; 
 
    } 
 
    
 
    console.log(findSecondLargeNumber([1, 4, 5, 6])) 
 
    console.log(findSecondLargeNumber([-1, -2]))

+2

當輸入數組爲[[-1,-2]' – Pointy

+1

時,OP希望函數返回'-2'什麼不,編輯帖子? – FrankCamara

+0

@FrankCamara對不起,我犯了一個錯誤,我編輯它。我知道我可以用'MDN'這個'Math.abs'方法,但是你能爲後代增加一個小的解釋嗎? –

1

這個怎麼樣:

function findSecondLargeNumber(arr) { 
 
    return arr.sort(function(a, b) { 
 
    return a - b 
 
    })[arr.length - 2]; 
 
} 
 

 
console.log(findSecondLargeNumber([-5,-3,-2,3,6,2])) //returns 3

+3

這將得到正確的答案,但它會花費更多時間,而不是像OP代碼那樣的簡單線性傳遞,它也會重新排列數組。 – Pointy

+0

@Pointy他可以複製數組 – mplungjan

1

嘗試這種解決方案:

function findSecondLargeNumber(arr){ 
    const sortedArray = arr.sort((v1, v2)=> v2 - v1); 
    return sortedArray[1]; 
} 
+0

這是行不通的,但箭頭功能還沒有廣泛使用。 – Robert

+1

與@ Robert's相同http://stackoverflow.com/a/43519550/295783 – mplungjan

1

清潔的代碼嘗試(儘管它重新排列的數組元素)

arr.sort((e,f) => (f-e))[1] 

對於在博物館展出作爲僞像的瀏覽器

arr.sort(function(a,b){return b-a})[1]; 
+0

簡而言之,請注意:不適用於IE11(https://caniuse.com/#search=arrow%20functions) – Robert

相關問題