原题链接:Leetcode 414. Third Maximum Number
Given an integer array nums
, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.
Example 1:
Input: nums = [3,2,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2.
The third distinct maximum is 1.
Example 2:
Input: nums = [1,2]
Output: 2
Explanation:
The first distinct maximum is 2.
The second distinct maximum is 1.
The third distinct maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: nums = [2,2,3,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2 (both 2’s are counted together since they have the same value).
The third distinct maximum is 1.
Constraints:
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
Follow up: Can you find an O(n) solution?
方法一:遍历数组
思路:
题目要求返回第三大的数,以及当没有三个不同数的情况下返回第二个数
那么就维护三个值:first、second、third,最后分情况返回即可
比较麻烦的就是初始值,需要设置一个最小的正数,这里用 LONG_LONG_MIN
C++ 代码:
class Solution {
public:
// const long long Min = -(1LL << 31) - 1;
int thirdMax(vector<int>& nums) {
long first = LONG_LONG_MIN, second = LONG_LONG_MIN, third = LONG_LONG_MIN; // 当前最大的三个数
// 遍历的同时维护这三个数
for(int i = 0; i < nums.size(); i++ ){
if(nums[i] > first){
third = second;
second = first;
first = nums[i];
}
else if(nums[i] < first && nums[i] > second){
third = second;
second = nums[i];
}
else if(nums[i] < second && nums[i] > third){
third = nums[i];
}
}
if(third == LONG_LONG_MIN)
return first;
return third;
}
};