c语言编程输入一组整数求其中出现次数最多的整数及其出现次数

 我来答
宇哥受命于天
2015-12-11 · TA获得超过446个赞
知道小有建树答主
回答量:111
采纳率:50%
帮助的人:43.3万
展开全部

马上想到以下方法实现:

  1. 排序,然后统计

  2. hash映射统计

考虑到排序的时间复杂度一般为O nlg(n),所以还是牺牲一定的空间换时间复杂度为O (1)的。当然,如果空间比时间宝贵的话,建议用第一种。或者你自己愿意试一下,这里给出第二个的代码,考虑到数组太消耗空间,使用STL中的map。map内部是用红黑树实现的,所以空间复杂度是O nlg(n)的,比数组的O(1)要差,但是还能接受:

#include <iostream>
#include <map>
using namespace std;

int main()
{
    map<int,int> dic;
    int a;

    //一直输入,知道遇到^z,也就是ctrl+z结束
    while(cin>>a)
    {
        //如果这个数字之前还没有,那么次数肯定是1
        if(dic.find(a) == dic.end())
        {
            dic[a] = 1;
        }
        //出现过次数加一
        else ++dic[a];
    }
    
    //初始化max的值
    int max_time = 0,max_number;
    //遍历这个map
    for(map<int,int>::iterator iter = dic.begin();iter != dic.end();++ iter)
    {
        //发现次数更多的
        if(iter->second > max_time)
        {
            max_time = iter->second;
            max_number = iter->first;
        }
    }

    cout<<max_number<<"is the most appear!appear "<<max_time;
    return 0;
}

不懂接着问,纪念我的第100个回答。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式