力扣-414. 第三大的数

int cmp(const void *testA, const void *testB)
{
    int *a = (int *)testA;
    int *b = (int *)testB;
    return *b > *a;/*降序排列*/
}
int thirdMax(int* nums, int numsSize)
{ 
    /*如果长度为1,直接返回数组中的数字*/
    if(numsSize == 1)
    {
        return nums[0];
    }
    int i = 0, max = 0;
    int fast = 1, slow = 1;/*slow从1开始说明数组的第一个数字是不动的*/
    qsort(nums, numsSize, sizeof(int), cmp);/*数组降序排列*/
    /*删除数组中重复的数字*/
    for(fast = 1; fast < numsSize; fast++)
    {
        if(nums[fast] != nums[fast - 1])
        {
            nums[slow] = nums[fast];
            slow++;/*计算出新数组的长度*/
        }
    }
    if(slow == 2)/*不存在第三大的数,返回数组中最大数*/
    {
        max = nums[0];
    }
    else
    {
        max = nums[2];
    }
    return max;
}

思想:很简单!

1.降序排列

2.删除数组中重复的数字

3.将存在数组中只有1个元素和2个元素的情况特殊处理

4.数组排序和删除重复数字后,第三个元素nums[2]即为数组中第三大的数!

你可能感兴趣的:(LeetCode,leetcode,C语言)