天天看點

LeetCode 414. 第三大的數

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;
    }
};           

複制

LeetCode 414. 第三大的數