题目: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];
}