我正在尝试在数字数组中查找第二大数字,但是最大数字出现了两次,所以我不能只是将其从数组中删除并选择新的最大数字。
array = [0, 3, 2, 5, 5]
(因此3
是第二大值)
我有这段代码可以显式地返回3,但是不适用于其他数组:
function getSecondLargest(nums) {
var sorted_array = nums.sort(function (a,b) {return a - b;});
var unique_sorted_array = sorted_array.filter(function(elem, index, self) {
return index === self.indexOf(elem);
})
return unique_sorted_array[unique_sorted_array.length - 2];
}
return unique_sorted_array[unique_sorted_array.length - 2];
如果我想使其更具动态性,有没有办法确定数组的最大值,然后将其与数组的每次迭代进行比较?
我在想一些类似的东西:
var greatestNum = sortedArray[-1]
while(greatestNum != i) do {
//check for the first number that doesn't equal greatestNum
}
任何帮助将不胜感激。
答案 0 :(得分:4)
您可以简单地先创建Set,然后创建sort并降序获取第一个索引元素
if (fscanf(a[i],"%f",&b[i][j][k]) != 1) { ...error management... }
对于那些考虑效率的人。这是海事组织的最佳方法
let array = [0, 3, 2, 5, 5]
let op = [...new Set(array)].sort((a,b) => b-a)[1]
console.log(op)
答案 1 :(得分:1)
我建议您做更多类似的事情
const nums = [0, 3, 2, 5, 5];
nums.sort(function (a,b) {return b - a;})
for (let i = 1; i < nums.length; i++) {
if (nums[0] !== nums[i]) {
return nums[i];
}
}
与转换并返回集合相比,这应该效率更高(尤其是在内存方面)...
答案 2 :(得分:0)
尝试一下:
var intArray = stringArray.map(nums); // now let's sort and take the second element :
var second = intArray.sort(function(a,b){return b-a})[1];
};