Skip to content

414. 第三大的数

js
;(function () {
  /**
   * 414. 第三大的数
   * 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
   *
   * 输入:[3, 2, 1]
   * 输出:1
   * 解释:第三大的数是 1 。
   *
   * 输入:[1, 2]
   * 输出:2
   * 解释:第三大的数不存在, 所以返回最大的数 2 。
   *
   * 输入:[2, 2, 3, 1]
   * 输出:1
   * 解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数
   * 此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
   *
   */

  function thirdMax(nums: number[]): number {
    // 方法一:
    // let arrSet: number[] = [...Array.from(new Set(nums))]
    // if (arrSet.length > 2) {
    //     // 倒序
    //     let newSort = arrSet.sort((a, b) => b - a)
    //     // 返回第三大值
    //     return newSort[2]
    // } else {
    //     // 返回最大值
    //     return Math.max(...arrSet)
    // }

    // 方法二:
    nums.sort((a, b) => b - a)
    for (let i = 1, diff = 1; i < nums.length; i++) {
      if (nums[i] !== nums[i - 1] && ++diff === 3) {
        return nums[i]
      }
    }
    return nums[0]
  }

  let nums: number[] = [3, 2, 1]
  let nums2: number[] = [3, 2, 2, 1]
  let nums3: number[] = [2, 1]
  console.log(thirdMax(nums))
  console.log(thirdMax(nums2))
  console.log(thirdMax(nums3))
})()