|
发表于 2023-9-27 16:38:48
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给你一个非空数组,返回此数组中 第三大的数字 。如果不存在,则返回数组中最大的数。
int max(int* nums, int numsSize)
{
int i = 0;
int flag = 0;
int x = nums[0];
while (i < numsSize)
{
if (x < nums[i])
{
x = nums[i];
flag = i;
}
i++;
}
return flag;
}
int min(int* nums, int numsSize)
{
int i = 0;
int flag = 0;
int x = nums[0];
while (i < numsSize)
{
if (x > nums[i])
{
x = nums[i];
flag = i;
}
i++;
}
return flag;
}
int thirdMax(int* nums, int numsSize){
if (numsSize < 3)
{
return nums[max(nums, numsSize)];
}
int i = min(nums, numsSize);
int f = nums[max(nums, numsSize)];
int k = 0;
int x = nums[0];
int count = 1;
for (int j = 0; j < 2; j++)
{
k = max(nums, numsSize);
if (x != nums[k])
{
count++;
}
x = nums[k];
for (int j = 0; j < numsSize; j++)
{
if (nums[j] == x)
{
nums[j] = nums[i];
}
}
}
if (count < 3)
{
return f;
}
k = max(nums, numsSize);
return nums[k];
}
这段代码有什么问题吗
这段代码存在以下问题:
1. 在 max() 和 min() 函数中,返回的是最大值和最小值的下标,而不是数值本身,这会导致后续代码的复杂度增加。
2. 在 thirdMax() 函数中,使用了两个嵌套的循环进行查找第三大的数,这会导致时间复杂度较高。
3. 在查找第三大的数时,代码中使用了一个计数器 count ,但是没有对其进行正确的更新,导致计数器的值不正确。
4. 在查找第三大的数时,代码中使用了两个嵌套的循环,但是内层循环中又使用了一个相同的变量 j ,这会导致变量重名的问题。
综上所述,这段代码需要进行重构和优化。
|
|