一、题目
函数原型:int thirdMax(int* nums, int numsSize)
二、思路
将数组降序排序。
如果数组元素个数小于3,直接返回第一个元素;
如果数组元素个数大于等于3,且不同元素个数小于3,直接返回第一个元素;
如果数组元素个数大于等于3,且不同元素个数大于等于3,遍历数组,直到遇到第三大的数(注意不是第三个数,因为前面个很可能有多个相同的数)。
三、代码
int cmp(const void *e1,const void *e2) {return *(int*)e2>*(int*)e1; } int thirdMax(int* nums, int numsSize) {qsort(nums,numsSize,sizeof(int),cmp);//降序排序数组if(numsSize<3)//数组元素个数小于3{return nums[0];}else//数组元素个数大于等于3{int i=0;//下标,遍历数组int j=1;//计数器,统计遇到不同数的个数for(i=0;i<numsSize-1;i++){if(j==3)//遇到第三大的数且与前面的数字都不相同break;if(nums[i+1]!=nums[i])j++;}if(j<3)//虽然数组元素个数大于等于3,但是不同的数小于3,因此和数组元素小于3的结果一样return nums[0];else//数组元素个数大于等于3,且不同数的个数也大于等于3return nums[i];} }