算法题:求一维数组中出现频率最高的数字

题目如下:一个一维整数数组,编程统计数组成员的出现频率,将出现频率最高的前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,然后继续遍历频率次之的元素。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值