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) {
if (nums.size() == 1) {
return nums[0];
}
else if (nums.size() == 2) {
if (nums[0] > nums[1]) {
return nums[0];
}
else return nums[1];
}
vector<int> left;
int max1 = -2147483648;
int max2 = -2147483648;
int max3 = -2147483648;
int n = nums.size();
bool appeared = false;
for (int i = 0; i < n; ++i)
{
if (nums[i] == -2147483648)
{
appeared = true;
}
if (nums[i] >= max1)
{
if (nums[i] > max1) {
max3 = max2;
max2 = max1;
max1 = nums[i];
}
}
else if (nums[i] >= max2)
{
if (nums[i] > max2) {
max3 = max2;
max2 = nums[i];
}
}
else if (nums[i] >= max3)
{
max3 = nums[i];
}
}
if (!appeared)
{
if (max3 == -2147483648) {
return max1;
}
else return max3;
}
else if (max2 > max3) {
return max3;
}
else return max1;
}
};