c语言编程输入一组整数求其中出现次数最多的整数及其出现次数
1个回答
展开全部
马上想到以下方法实现:
排序,然后统计
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个回答。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |