第三大的数

105 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。(出自力扣)

  • 示例1
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1
  • 示例2
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2
  • 示例3
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1

思路分析

  • 据题意可知,该题目是在一个数组里找出第三大的数字,也就是说是数值比大小。
  • 首先我们可以先把两个数组排下序,从大往小的排列。
  • 然后判断相邻元素是不一样,声明一个变量进行统计不同元素的个数。
  • 若变量等与3的时候,此时下标指向的元素就是第三大。
  • 若是变量小于3,则取数组的第一个值。

AC代码

let n = [2,4,1,5]
function thirdMax(nums) {
    nums.sort((a, b) => a - b);
    nums.reverse();
    let diff = 1;
    for(let i=1; i<nums.length; ++i) {
        ++diff;
        if(nums[i] !== nums[i - 1] && diff === 3) {
            return nums[i];
        } 
    }
    return nums[0];
}
console.log(thirdMax(n))

总结

这个题目主要考察数组的方法;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。