算法题:求一维数组中出现频率最高的数字
题目如下:一个一维整数数组,编程统计数组成员的出现频率,将出现频率最高的前N个数组成员输出来。
以下为代码段:
#include <iostream>
#define N1 1000
int b[N1] = { 0 };
int max;
int index = 0;
int i, j, n;
void top(int a[], int size, int N)
{
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
if (a[i] == a[j])
{
b[i]++;
}
}
}
for (int i = 0; i < N; i++)
{
max = b[0];
index = 0;
for (j = 1; j < size; j++)
{
if (max < b[j])
{
max = b[j];
index = j;
}
}
printf("%d,%d\n", a[index], max);
for (j = 0; j < size; j++)
{
if (max == b[j])
{
b[j] = 0;
}
}
}
}
int main()
{
int N = 2;
int a[N1] = { 6,3,3,6,6,-2,3,7,3 };
top(a, 9, N);
return 0;
}
思路:先用for循环遍历数组,采用map的思路,每一个数组元素对应的数组b[],对应a[]相应位置,记录元素在数组a其他位置出现的次数,for循环结束就得到类似于map的一一对应于a的数组b,数组b记录的为数组a中元素出现的元素次数。第二步的思路是当遍历完频率最高的元素次数及元素值,就再用一个for循环置零数组b,然后继续遍历频率次之的元素。