leetcode 算法题414 (简单104) 第三大的数
- 题目介绍
给定一个非空数组,返回此数组中第三大的数。
如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
- 示例
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .
输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
- 解法一
/**
* @param {number[]} nums
* @return {number}
*/
var thirdMax = function(nums) {
if(nums.length === 0) {
return 0;
}
if(nums.length === 1) {
return nums[0];
}
if(nums.length === 2) {
return Math.max(nums[0], nums[1]);
}
let x = y = z = Number.MIN_SAFE_INTEGER, i = 0;
while(i < nums.length) {
if(nums[i] > x) {
z = y;
y = x;
x = nums[i];
} else if(nums[i] > y && nums[i] < x) {
z = y;
y = nums[i];
} else if(nums[i] > z && nums[i] < y) {
z = nums[i];
}
i++;
}
return z === Number.MIN_SAFE_INTEGER ? x : z;
};
执行用时 : 72 ms, 在所有 JavaScript 提交中击败了98.95%的用户
内存消耗 : 34.7 MB, 在所有 JavaScript 提交中击败了80.00%的用户