题目:
思路:虽然是个简单题,但我写的还是挺久的....有两个地方容易错:(1)重复字符要过滤,不然第三个样例过不去。(2)测试样例中居然有INT_MIN,比如[1,2,INT_MIN],一般正常时候我们写就会输出1,但这种时候要输出INT_MIN。这种时候就要单独写一个flag来判断nums中是否有INT_MIN,并且在最后return的时候也要注意条件判断。
代码:
class Solution {
public:
int thirdMax(vector<int>& nums) {
int length=nums.size();
//if (length==0) return NULL;
//if (length==1) return nums[0];
//if (length==2) return max(nums[0],nums[1]);
double first=INT_MIN,second=INT_MIN;
bool flag=false;
int tmp=0,third=INT_MIN,x=0;
for (int i=0;i<nums.size();i++){
x=nums[i];
if(nums[i]==INT_MIN)
{
flag=true;
continue;
}
if (x>first){
tmp=first;
first=x;
third=second;
second=tmp;
}
else if (x<first){
if (x>second){
third=second;
second=x;
}
else if (x<second){
if (x>third) third=x;
}
}
}
return third==INT_MIN? ((second>INT_MIN && flag)?third:first):third;
}
};
----
2020.4.5 第4题。