题目描述
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
解题思路
分为两种情况:
- 数组长度小于 3
- 数组长度大于3
小于3
数组从大到小排序,通过Set 集合去重,取出第一个元素即可
大于3
数组从大到小排序,通过Set 集合去重,取出第三个元素即可
代码
var thirdMax = function(nums) {
nums = nums.sort((a, b) => b - a);
nums = [...new Set(nums)];
const len = nums.length;
if(len < 3) {
return nums[0];
}
return nums[2];
};
其他人的思路
思路
将数组从大到小排序后,从头开始遍历数组,通过判断相邻元素是否不同,来统计不同元素的个数。如果能找到三个不同的元素,就返回第三大的元素,否则返回最大的元素。
var thirdMax = function(nums) {
nums = 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];
}
}
}