一开始想到求第k大的数的解法,其实并不需要那么复杂。
设置三个数:max1,max2,max3,分别代表第1大,第2大,第3大的数,遍历一遍就可以了。
注意:初始值都设为LONG_MIN。
int thirdMax(vector<int>& nums) {
long max1 = LONG_MIN,max2=LONG_MIN,max3=LONG_MIN;
for(vector<int>::iterator it= nums.begin();it != nums.end(); ++it)
{
int tmp = *it;
if(tmp > max1)
{
max3 = max2;
max2 = max1;
max1 = tmp;
}
else if(tmp > max2 && tmp < max1)
{
max3 = max2;
max2 = tmp;
}
else if(tmp > max3 && tmp < max2)
{
max3 = tmp;
}
}
if(max3 == LONG_MIN || max2 == LONG_MIN)
{
return max1;
}
return max3;
}
本文介绍了一种寻找数组中第三大数的简单高效算法。通过维护三个变量记录最大、次大和第三大的数,在一次遍历过程中即可完成。文章提供了具体的实现代码,并解释了初始化这些变量为LONG_MIN的重要性。
822

被折叠的 条评论
为什么被折叠?



