我有一个这样的整数数组:
arr[20,120,111,215,54,78];
我需要一个以数组为参数并返回该数组的第二大元素的函数。
最直接的实现是在不修改原始数组的情况下迭代并跟踪最大的和次大的:
function nextBiggest(arr) {
let max = -Infinity, result = -Infinity;
for (const value of arr) {
const nr = Number(value)
if (nr > max) {
[result, max] = [max, nr] // save previous max
} else if (nr < max && nr > result) {
result = nr; // new second biggest
}
}
return result;
}
const arr = ['20','120','111','215','54','78'];
console.log(nextBiggest(arr));
var secondMax = function (){
var arr = [20, 120, 111, 215, 54, 78]; // use int arrays
var max = Math.max.apply(null, arr); // get the max of the array
arr.splice(arr.indexOf(max), 1); // remove max from the array
return Math.max.apply(null, arr); // get the 2nd max
};
正如davin所指出的,性能可以通过不进行拼接来提高,但暂时将最大值替换为-Infininty
:
var secondMax = function (arr){
var max = Math.max.apply(null, arr), // get the max of the array
maxi = arr.indexOf(max);
arr[maxi] = -Infinity; // replace max in the array with -infinity
var secondMax = Math.max.apply(null, arr); // get the new max
arr[maxi] = max;
return secondMax;
};
无论如何,恕我直言,最好的算法是杰克的。1 次通过,转换为数字。我的很短,使用内置方法,只是想提供它作为替代方案,以展示您可以实现目标的所有不同方式。
具有多个值的边缘情况。
正如评论指出的那样:如果我们有一个像[3, 3, 5, 5, 5, 4, 4]
. 另一方面,我们认为“第二大元素”也是一个解释问题。在示例中,我们有:
第二大元素可以解释为:
最简单的解决方案是排序:
// here's your array :
var stringArray = new Array('20','120','111','215','54','78');
// let's convert it to a real array of numbers, not of strings :
var intArray = stringArray.map(Number);
// now let's sort it and take the second element :
var second = intArray.sort(function(a,b){return b-a})[1];
如果您不想要最简单但最快的(您可能不需要它),那么您必须编写for
循环并在循环时存储两个最大的元素。
首先倒序排序,然后得到第二个元素:
['20','120','111','215','54','78'].sort(function(a, b) { return b - a; })[1];
// '120'
显然也适用于字符串。
对数组进行排序,然后返回第二个索引。
var arr = ['20','120','111','215','54','78'];
arr.sort(function(a,b){
return b-a;
});
console.log(arr[1]);
将您的数组从最小到最大排序,然后从末尾抓取第二个.length-2
var myArray =['20','120','111','215','54','78'];
var secondLargest = myArray.sort(function(a,b){return a - b})[myArray.length-2];
alert(secondLargest); //120;
你可以试试这个:
function second_highest(arr)
{
var second_highest = arr.sort(function(a, b) { return b - a; })[1];
return second_highest;
}