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