【发布时间】:2016-09-02 01:20:11
【问题描述】:
我的实际问题是在数据集中找到频率第二高的数字。我正在初始化一个数组,它是数据集中最大数字的大小,然后在每次数字出现在数据集中时递增数组中的相应索引。如果两个以上的索引共享第二高频率,那么我需要返回较大的索引。我的代码在某些情况下会返回正确的答案,但不是全部,而且我无法在我的逻辑中找到错误。
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
【问题讨论】:
-
用你的调试器单步调试函数,它会告诉你什么时候变量是错误的。
-
返回时为什么要给
secondHighest加1? -
您可以使用
>=组合第二个和第三个if。 -
你能举一个输入产生错误结果的例子吗?
-
你需要
else if (data[x] == data[highest]){ highest = x; }。