📜  在数组 javascript 中查找第二大数字(1)

📅  最后修改于: 2023-12-03 15:37:42.865000             🧑  作者: Mango

在数组 JavaScript 中查找第二大数字

当我们需要在一个数组中查找第二大的数字时,我们可以使用以下几种方法:

方法一:排序

最简单的方法是将数组进行排序,然后返回第二个元素(即第二大的元素)。

const arr = [1, 5, 7, 3, 9];
arr.sort((a, b) => b - a); // 将数组进行降序排序
const secondLargest = arr[1]; // 返回第二个元素
console.log(secondLargest); // 输出 7

但是这种方法有一个缺点,就是排序算法的时间复杂度为 O(nlogn),因此在处理大数据量的数组时,会比较低效。

方法二:遍历

我们可以遍历数组,同时使用变量记录当前最大数和第二大数。当遍历到一个数时,如果它比当前最大数要大,则将第二大数更新为当前最大数,并将当前最大数更新为这个数;如果它比当前最大数小但比第二大数大,则将第二大数更新为这个数。

const arr = [1, 5, 7, 3, 9];
let largest = arr[0];
let secondLargest = arr[0];

for (let i = 1; i < arr.length; i++) {
  if (arr[i] > largest) {
    secondLargest = largest;
    largest = arr[i];
  } else if (arr[i] < largest && arr[i] > secondLargest) {
    secondLargest = arr[i];
  }
}

console.log(secondLargest); // 输出 7

时间复杂度为 O(n),因此这种方法更适合处理大数据量的数组。

方法三:使用 ES6 Math 方法

ES6 的 Math API 中有一些方法可以方便地查找数组中的最大数和第二大数。我们可以使用 Math.max() 方法获取数组中的最大值,并将其从数组中移除;然后再次使用 Math.max() 就可以得到第二大的值。

const arr = [1, 5, 7, 3, 9];
const max = Math.max(...arr); // 获取数组中的最大值
arr.splice(arr.indexOf(max), 1); // 将最大值从数组中移除
const secondLargest = Math.max(...arr); // 获取数组中的次大值
console.log(secondLargest); // 输出 7

这种方法也很简单,但是如果数组中有相同的最大值,那么它只会移除其中一个,因此可能无法得到正确的结果。

综上所述,我们可以选择使用遍历方法来查找数组中的第二大数字。