问题:给定一个数字数组,如何找出第二大的数字?例如[1,3,5,2], 第二大的数字就是3。
方法一:
利用排序

function getSecondMaxNum(arr) {
const sortedArr = arr.sort(function(x,y){
return y - x;
});

let max = sortedArr[0];
for (let i = 0; i < sortedArr.length; i++) {
const num = sortedArr[i];
if(num < max) return num;
}
}

console.log(getSecondMaxNum([1,2,8,5]));

方法二:两次遍历

function getSecondMaxNum(arr) {
let max = 0, secondMax = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}

for (let j = 0; j < arr.length; j++) {
if (arr[j] < max && arr[j] > secondMax) {
secondMax = arr[j];
}
}

return secondMax;
}

console.log(getSecondMaxNum([1,2,8,5]));

方法三:一次遍历,最后添加一个最小值

function getSecondMaxNum(arr) {
arr.push(Number.MIN_VALUE);
let max = 0, secondMax = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
if (arr[i] > secondMax && arr[i] < max) secondMax = arr[i];
}
return secondMax;
}

console.log(getSecondMaxNum([1,2,8,5]));