简单
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
示例 2:
输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。
示例 3:
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
**进阶:**你能设计一个时间复杂度 O(n)
的解决方案吗?
题解: 使nums的大小始终保持为3,如果nums的大小大于3就删除最小值,返回时判断大于等于3或小于3
class Solution {
public:
int thirdMax(vector<int>& nums){
set<int>temp;
for(int i=0;i<nums.size();i++){
temp.insert(nums[i]);//vector压入set set自升序排列,方便删除最小值
if(temp.size()>3)//让set大小始终保持3
temp.erase(temp.begin());//大于3删除最小元素也就是头元素
}
return temp.size()==3?*temp.begin():*temp.rbegin();//如果条件成立返回最小值也就是第三大值,否则元素少于3个返回最大值
}
};