1. 程式人生 > 實用技巧 >LeetCode C++ -- 414. 第三大的數

LeetCode C++ -- 414. 第三大的數

題目難度:簡單

給定一個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是O(n)。

示例 1:

輸入: [3, 2, 1]

輸出: 1

解釋: 第三大的數是 1.
示例 2:

輸入: [1, 2]

輸出: 2

解釋: 第三大的數不存在, 所以返回最大的數 2 .
示例 3:

輸入: [2, 2, 3, 1]

輸出: 1

解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數。
存在兩個值為2的數,它們都排第二。

解題:

class Solution {
public:
    /*要求演算法時間複雜度 o(n) 
        1.可以使用散列表進行儲存,但是由於不知道陣列中的資料範圍,無法進行操作
        2.使用二叉樹進行排序,但是不會用。。。。
        3.使用暴力演算法進行遍歷
    
*/ //使用方法 3 int thirdMax(vector<int>& nums) { int len = nums.size(); //當陣列中只有一個數據時,直接返回該資料值 if(len == 1)return nums[0]; int max1,max2,max3; bool tf = false; //初始化為最小值 max1 = max2 = max3 = 0x80000000;//x80000000; //最大值 for(auto i : nums)
if(i >= max1){ max1 = i;} // else tf = false; //第二大 for(auto i : nums) if(i >= max2 && i < max1){ max2 = i;} // else tf = false; //最小 for(auto i : nums) if(i >= max3 && i < max2){ tf = true; max3 = i;}
// else tf = false; //測試用 //cout<<max1<<" "<<max2<<" "<<max3; //最後進行判斷a if(tf) return max3; else return max1; } };