1. 題目
給定一個非空數組,傳回此數組中第三大的數。如果不存在,則傳回數組中最大的數。要求算法時間複雜度必須是O(n)。
示例 1:
輸入: [3, 2, 1]
輸出: 1
解釋: 第三大的數是 1.
示例 2:
輸入: [1, 2]
輸出: 2
解釋: 第三大的數不存在, 是以傳回最大的數 2 .
示例 3:
輸入: [2, 2, 3, 1]
輸出: 1
解釋: 注意,要求傳回第三大的數,是指第三大且唯一出現的數。
存在兩個值為2的數,它們都排第二。
複制
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/third-maximum-number
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 設定3個最大值變量,注意使用 long int
- 不等于的情況才更新,更新某個大值,其以下的都要更新
class Solution {
public:
int thirdMax(vector<int>& nums) {
long M1, M2, M3;
M1 = M2 = M3 = LONG_MIN;
for(int i = 0; i < nums.size(); ++i)
{
if(nums[i] > M1)
M3 = M2, M2 = M1, M1 = nums[i];
else if(nums[i] > M2 && nums[i] < M1)
M3 = M2, M2 = nums[i];
else if(nums[i] > M3 && nums[i] < M2)
M3 = nums[i];
}
if(M3 == LONG_MIN)
return M1;
return M3;
}
};
複制