题目链接:. - 力扣(LeetCode)
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.
class Solution {
public:
int thirdMax(vector<int> &nums) {
long a = LONG_MIN, b = LONG_MIN, c = LONG_MIN;
for (long num : nums) {
if (num > a) {
c = b;
b = a;
a = num;
} else if (a > num && num > b) {
c = b;
b = num;
} else if (b > num && num > c) {
c = num;
}
}
return c == LONG_MIN ? a : c;
}
};
class Solution{
public:
int thirdMax(vector<int>& nums)
{
int result=0;
int len=nums.size();
int first=INT_MIN,second=INT_MIN,third=INT_MIN;
int count=0,bottom=0;
if(len==1)
return nums[0];
else if(len==2)
return max(nums[0],nums[1]);
else
{
for(int i=0;i<len;i++)
{
if(nums[i]==INT_MIN)
bottom=1;
if(nums[i]==first||nums[i]==second||nums[i]==third)
continue;
if(nums[i]>first)
{
third=second;
second=first;
first=nums[i];
count++;
}
else if(nums[i]>second)
{
third=second;
second=nums[i];
count++;
}
else if(nums[i]>third)
{
third=nums[i];
count++;
}
}
if(count+bottom>=3)
result=third;
else
result=first;
return result;
}
}
};