第三大数-简单
难度:简单
题目描述:
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是 O(n)。
示例:
输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
1
2
3
4
2
3
4
解题思路:
1.去重排序后筛选
function thirdMax(data) {
var arr = [...new Set(data)].sort((a, b) => b - a);
console.log(newData);
if (newData.length <= 3) {
return data[0];
} else {
return data[2];
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 三个数存三个值
var thirdMax = function (nums) {
var one = nums[0];
var two = -Infinity;
var three = -Infinity;
for (var i = 0; i < nums.length; i++) {
if (nums[i] == one || nums[i] == two || nums[i] == three) continue;
if (nums[i] > one) {
three = two;
two = one;
one = nums[i];
} else if (nums[i] > two) {
three = two;
two = nums[i];
} else if (nums[i] > three) {
three = nums[i];
}
}
return nums.length >= 3 && three != -Infinity ? three : one;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
← 三个数最大乘积-简单 移动零-简单 →