ynnh 发表于 2023-9-27 16:38:48

第三大的数

给你一个非空数组,返回此数组中 第三大的数字 。如果不存在,则返回数组中最大的数。

int max(int* nums, int numsSize)
{
    int i = 0;
    int flag = 0;
    int x = nums;
    while (i < numsSize)
    {
      if (x < nums)
      {
            x = nums;
            flag = i;
      }
      i++;
    }
    return flag;
}
int min(int* nums, int numsSize)
{
    int i = 0;
    int flag = 0;
    int x = nums;
    while (i < numsSize)
    {
      if (x > nums)
      {
            x = nums;
            flag = i;
      }
      i++;
    }
    return flag;
}

int thirdMax(int* nums, int numsSize){
    if (numsSize < 3)
    {
      return nums;
    }
    int i = min(nums, numsSize);
    int f = nums;
    int k = 0;
    int x = nums;
    int count = 1;
    for (int j = 0; j < 2; j++)
    {
      k = max(nums, numsSize);
      if (x != nums)
      {
            count++;
      }
      x = nums;
      for (int j = 0; j < numsSize; j++)
      {
            if (nums == x)
            {
                nums = nums;
            }
      }
    }
    if (count < 3)
    {
      return f;
    }
    k = max(nums, numsSize);
    return nums;
}

这段代码有什么问题吗

isdkz 发表于 2023-9-27 16:39:01

这段代码存在以下问题:

1. 在max()和min()函数中,返回的是最大值和最小值的下标,而不是数值本身,这会导致后续代码的复杂度增加。

2. 在thirdMax()函数中,使用了两个嵌套的循环进行查找第三大的数,这会导致时间复杂度较高。

3. 在查找第三大的数时,代码中使用了一个计数器count ,但是没有对其进行正确的更新,导致计数器的值不正确。

4. 在查找第三大的数时,代码中使用了两个嵌套的循环,但是内层循环中又使用了一个相同的变量j ,这会导致变量重名的问题。

综上所述,这段代码需要进行重构和优化。

ynnh 发表于 2023-9-27 16:41:23

泪目
页: [1]
查看完整版本: 第三大的数