gpt4 book ai didi

c - 如何找到数组中第二大的数字,但返回该值出现的最后一个索引?

转载 作者:行者123 更新时间:2023-12-05 01:34:48 29 4
gpt4 key购买 nike

我的实际问题是在数据集中找到频率第二高的数字。我正在初始化一个数组,它是数据集中最大数字的大小,然后每次数字出现在数据集中时递增数组中的相应索引。如果两个以上的索引共享第二高的频率,那么我需要返回较大的索引。在某些情况下,我的代码会返回正确的答案,但不是全部,而且我无法在我的逻辑中找到错误。

int secondFreq(int data[], int maxNum){
int highest = 0;
int secondHighest = 0;
int x;

for(x = 0; x < maxNum; x++){
if(data[x] > data[highest]){
secondHighest = highest;
highest = x;
}
else if (data[x] > data[secondHighest]){
secondHighest = x;
}
else if (data[x] == data[secondHighest]){
secondHighest = x;
}
}

return secondHighest + 1;
}

这是一个产生错误答案的数组示例。左边的数字是索引,右边的数字是存储在该索引处的值。我的函数返回 12(第 11 个索引 + 1),但它应该返回 5(第 4 个索引 + 1)。

    0 - 2
1 - 2
2 - 5
3 - 2
4 - 5
5 - 4
6 - 2
7 - 2
8 - 6
9 - 4
10 - 3
11 - 6
12 - 2
13 - 2
14 - 3

最佳答案

您的代码有两个问题:

  1. data[x] == data[highest] 的情况下,您需要设置 highest = x;
  2. secondHighest 最初应该是未决的。

以下是修改示例:

int secondFreq(int data[], int maxNum){
int highest = 0;
int secondHighest, secondFlag = 0;//secondFlag : Whether secondHighest has been determined, 0 : undetermined, 1(Not 0) : determined
int x;

for(x = 1; x < maxNum; x++){
if(data[x] > data[highest]){
secondHighest = highest;
highest = x;
secondFlag = 1;
}
else if (data[x] == data[highest]){
highest = x;
}
else if (secondFlag == 0 || data[x] >= data[secondHighest]){
secondHighest = x;
secondFlag = 1;
}
}

if(secondFlag)
return secondHighest + 1;
else
return 0;//All elements same
}

关于c - 如何找到数组中第二大的数字,但返回该值出现的最后一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39283020/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com