【刷题】414. 第三大的数——给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

题目:414. 第三大的数

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
在这里插入图片描述

解答:

方法一:

int thirdMax(int* nums, int numsSize)
{
    
    
    // min记录最小值
    int min=nums[0];
    // max记录最大值
    int max=nums[0];
    // middle记录第二大
    int middle;
    // third记录第三大
    int third;
    int i=0;
    // 寻找最大值
    for(i=0;i<numsSize;i++)
    {
    
    
        if(nums[i]>max)
        {
    
    
            max=nums[i];
        }
    }
    // 寻找最小值
    for(i=0;i<numsSize;i++)
    {
    
    
        if(nums[i]<min)
        {
    
    
            min=nums[i];
        }
    }
    // 寻找第二大
    middle=min;
    for(i=0;i<numsSize;i++)
    {
    
    
        if(nums[i]<max && nums[i]>middle)
        {
    
    
            middle=nums[i];
        }
    }
    // 寻找第三大
    third=min;
    for(i=0;i<numsSize;i++)
    {
    
    
        if(nums[i]<middle && nums[i]>third)
        {
    
    
            third=nums[i];
        }
    }
    // 判断有没有第三大
    if(third==max || third==middle)
        return max;
    else
        return third;
}

方法二:

int thirdMax(int* nums, int numsSize)
{
    
    
    // 冒泡排序
    int i=0;
    int j=0;
    for(i=0;i<numsSize-1;i++)
    {
    
    
        for(j=0;j<numsSize-i-1;j++)
        {
    
    
            if(nums[j]<nums[j+1])
            {
    
    
                int tmp=nums[j];
                nums[j]=nums[j+1];
                nums[j+1]=tmp;
            }
        }
    }
    // 从第二个元素开始进行比较
    i=1;
    // 找到第三大的一个标记
    int count=2;
    // 当前最大值
    int max=nums[0];
    // 寻找第三大
    while(i<numsSize && count)
    {
    
    
        // 找到比当前最大值小一个的元素
        if(nums[i]<max)
        {
    
    
            max=nums[i];
            i++;
            count--;
        }
        // 与当前最大值相同的元素
        else
        {
    
    
            i++;
        }
    }
    // 判断是否存在第三大数
    // 存在,则count会从2减少到0
    if(count==0)
        return max;
    // 不存在,直接返回最大值
    else
        return nums[0];
}

猜你喜欢

转载自blog.csdn.net/m0_46613023/article/details/113922791