Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).
Example 1:
Input: [3, 2, 1] Output: 1 Explanation: The third maximum is 1.
Example 2:
Input: [1, 2] Output: 2 Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: [2, 2, 3, 1] Output: 1 Explanation: Note that the third maximum here means the third maximum distinct number. Both numbers with value 2 are both considered as second maximum.题目大意:给出一个非空的整型数组,编写程序返回第三大的数字。如果没有第三大的数字则返回最大的数字。
解题思路:因为数字有可能重复,所以用set维护已经出现的数字,然后再用优先队列来维护数组最大值和第三大的值。
代码如下:
class Solution {
public:
int thirdMax(vector<int>& nums) {
for(auto a : nums){
if(st.count(a) == 0){
pque.push(a);
st.insert(a);
}
}
int thirdMax = pque.top();
if((int)st.size() >= 3) {
pque.pop();
pque.pop();
thirdMax = pque.top();
}
return thirdMax;
}
private:
priority_queue<int> pque;
set<int> st;
};