【LeetCode】414. 第三大的數
阿新 • • 發佈:2018-12-14
題目描述
給定一個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是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;
}
};