1. 程式人生 > >【LeetCode】414. 第三大的數

【LeetCode】414. 第三大的數

題目描述

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

示例1

輸入: [3, 2, 1]

輸出: 1

解釋: 第三大的數是 1.

示例2

輸入: [1, 2]

輸出: 2

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

示例3

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

輸出: 1

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

解決方法

找出第一大和第二大的數,並標記這些數,在剩下的數中尋找最大的數就是整個序列的第三大數

class Solution {
public:
    int
thirdMax(vector<int>& nums) { if (nums.size()==1) return nums[0]; if (nums.size()==2) return max(nums[0],nums[1]); vector<bool> flag(nums.size(),true); int max1=INT_MIN,max2=INT_MIN,max3=INT_MIN; for (int i=0;i<nums.size();i++
){ //找第一大 if (nums[i]>max1) max1=nums[i]; } for (int i=0;i<nums.size();i++){ if (nums[i]==max1) flag[i]=false; } for (int i=0;i<nums.size();i++){ //找第二大 if (nums[i]>max2 && flag[i]) max2=
nums[i]; } for (int i=0;i<nums.size();i++){ if (nums[i]==max2) flag[i]=false; } bool ff=true; for (int i=0;i<nums.size();i++){ //找第三大 if (nums[i]>=max3 && flag[i]){ max3=nums[i]; ff=false; } } if (ff) return max1; return max3; } };