Third Maximum Number
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.
Solution: Using Quick Sort
Solution: Keep track of the first, second and third largest number
Note: We need to use long int to save the number, cause there might be INT_MAX and INT_MIN in the array.
int thirdMax(vector<int>& nums) {
long first = LONG_MIN, second = LONG_MIN, third = LONG_MIN;
for (auto num: nums) {
if (num > first) {
third = second;
second = first;
first = num;
} else if (num < first && num > second) {
third = second;
second = num;
} else if (num < second && num > third) {
third = num;
}
}
return third == LONG_MIN ? first : third;
}
Solution: Using set
Set will save the mebers in ascending order.
int thirdMax(vector<int>& nums) {
set<int> top3;
for (const int& num : nums) {
top3.insert(num);
if (top3.size() > 3) {
top3.erase(top3.begin());
}
}
return top3.size() == 3 ? *(top3.begin()) : *(top3.rbegin());
}