Problem:
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 (C++):
int thirdMax(vector<int>& nums) {
if (nums.empty()) return 0;
int n = nums.size(), count = 0;
sort(nums.begin(), nums.end(), greater<int>());
for (int i = 0; i < n; ++i) {
while (i < n-1 && nums[i] == nums[i+1]) ++i;
++count;
if (count == 3) return nums[i];
}
if (count < 3) return nums[0];
return 0;
}
性能:
Runtime: 20 ms Memory Usage: 9.6 MB
思路:
Solution (C++):
性能:
Runtime: ms Memory Usage: MB