【发布时间】:2020-08-05 12:29:39
【问题描述】:
问题:
给你一个整数数组,其中包含随机顺序的数字。编写一个程序来查找并返回给定输入中出现次数最多的数字。
如果两个或多个元素争夺最大频率,则返回数组中最先出现的元素。
输入格式:
第 1 行:一个整数 N,即数组的大小
第 2 行:N 个整数,它们是数组的元素,用空格分隔输出格式:
最频繁的元素
约束:
0
示例输入 1:
13 2 12 2 11 12 2 1 2 2 11 12 2 6样本输出 1:
2
输出不正确,请告诉错误。 这是代码:
#include <unordered_map>
using namespace std;
int highestFrequency(int *input, int n){
unordered_map<int, int> map;
int maxFreq = 0;
for(int i = 0; i < n; i++){
if(map.count(input[i]) > 0){
map[input[i]]++;
if(map[input[i]] > maxFreq){
maxFreq = map[input[i]];
}
}
map[input[i]] = 1;
}
for(int i = 0; i < n; i++){
if(map[input[i]] == maxFreq){
cout << input[i];
}
}
/* Don't write main().
* the input array is already passed as function argument.
* Taking input and printing output is handled automatically.
*/
}
【问题讨论】:
-
你应该从函数返回值,而不是打印它。 (您需要同时跟踪值(或索引)和频率。)
-
是我自己还是你忘了在
map[inpuit[i]] = 1之前加上else-statement? -
另外,不需要整个
if(map.count(input[i]) > 0)的东西。map[input[i]]++;只会在还没有价值的时候起作用。
标签: c++ arrays data-structures hashmap