一、题目
函数原型: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,且不同数的个数也大于等于3 return nums[i]; } }