首页 > 解决方案 > 试图在 javascript 数组中找到第二大的值

问题描述

我试图找到数组中的第二大值,但我的代码返回数组中的第二小值。关于我在哪里错过它的任何指示?假设代码只是简单地向后循环遍历数组,匹配任何小于最大值和“小于”最大值的值。

function getSecondLargest(nums) {
  let sNums = nums.sort();
  let max = sNums.length - 1;
  for (let i = sNums.length; i > 0; i--) {
    if (sNums[i] < max && (sNums[i] === (max - 1))) {
      return sNums[i];
    }
  }
 }
 
 console.log(getSecondLargest([8,7,9,4,5,6,3,2.10,22,42,101]))

标签: javascriptarrayssorting

解决方案


您可以按降序对其进行排序并取第二项。

function getSecondLargest(nums) {
  return nums.sort((n1,n2) => n2-n1)[1];
}
    
console.log(getSecondLargest([10,20,40,30,80,90]));

如果有重复,您可以使用它。

function getSecondLargest(nums) {
  return nums.sort((n1,n2) => n2-n1).filter(function(item, pos, ary)    {
        return !pos || item != ary[pos - 1];
   })[1];
}
    
console.log(getSecondLargest([10,20,40,30,80,90,90]));

Tino 代码的问题是找到第二个最大数。它应该是let max = sNums[sNums.length - 1];而不是let max = sNums.length - 1;,循环应该从开始sNums.length - 1并且一直到直到i >= 0,并且 if 语句只需要将当前值与最大值进行比较。如果没有找到第二大的,则返回 null。Null表示数组中的所有元素都具有相同的值。

function getSecondLargest(nums) {
  let sNums = nums.sort((a,b) => a-b);
  let max = sNums[sNums.length - 1];
  for (let i = sNums.length - 1; i >= 0; i--) {
    if (sNums[i] < max) {
      return sNums[i];
    }
  }
  return null;
 }
 
 console.log(getSecondLargest([8,7,9,9,4,5,6,3,2]))


推荐阅读