这道题的关键是想象有三个凹槽,把能找到的最大的数给推进去,然后看情况替换,如比目前第一大的数小,又比目前第二大的数大的数。然后为了保证能够判断凹槽是否被替换过,有个flag。注意如果这个第三大的数恰好是凹槽原始值,flag不会增加,所以要设为第三大的数绝对不会取的一个至小的数
class Solution {
public:
int thirdMax(vector<int>& nums) {
long long one = LONG_MIN;
long long two = LONG_MIN;
long long three = LONG_MIN;
int flag = 0;
for(int i = 0;i<nums.size();i++)
{
if(nums[i]>one)
{
three = two;
two = one;
one = nums[i];
flag++;
cout<<three<<" "<<two<<" "<<one<<endl;
}
else if(nums[i]<one && nums[i]>two)
{
three = two;
two = nums[i];
flag++;
cout<<three<<" "<<two<<" "<<one<<endl;
}
else if(nums[i]>three && nums[i]<two)
{
three = nums[i];
flag++;
cout<<three<<" "<<two<<" "<<one<<endl;
}
}
return flag>=3?three:one;
}
};