给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
样例
样例 1:
输入: num = [3, 2, 1]
输出: 1
解释: 第三大的数是 1.
样例 2:
输入: num = [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .
样例 3:
输入: num = [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
class Solution {
public:
/**
* @param nums: the array
* @return: the third maximum number in this array
*/
int thirdMax(vector<int> &nums) {
// Write your code here.
if(nums.size()==0) return 0;
else if(nums.size()==1) return nums[0];
else if(nums.size()==2) return nums[0]>nums[1]?nums[0]:nums[1];
sort(nums.begin(),nums.end());
int cnt=1;
int num=nums[nums.size()-1];
for (int i = nums.size()-1; i >= 0; i--) {
/* code */
if(nums[i]!=num) {cnt++;num=nums[i];}
if(cnt==3) return nums[i];
}
return nums[nums.size()-1];
}
};