问题:给定一个数字数组,如何找出第二大的数字?例如[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]));