3192. 出现次数最多的数 13年12月CSP
Posted infocodez
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3192. 出现次数最多的数 13年12月CSP相关的知识,希望对你有一定的参考价值。
13年12月CCF计算机软件能力认证,第1题
第一次提交,数据范围写错了,wa,日常迷糊,太久不写题了。
第二次提交,试图在一次循环内解决,但忘了判断答案是否为最小的数,wa。
真没必要在螺蛳壳里做道场。在简单题里降低时间复杂度,没有什么实际意义,反而提高错误率。能快速ac的代码,才是好代码!
常规解法,两次循环的ac代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 10000+1;
int cnt[N];
int main()
int n,ans = 0;
cin>>n;
while(n--)
int x;
cin>>x;
cnt[x]++;
for(int i = 1;i <= N;i++)
if(cnt[i] > cnt[ans]) ans = i;
cout<<ans;
return 0;
一次循环的ac代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 10000+1;
int cnt[N];
int main()
int n,ans = 0,max = 0;
cin>>n;
while(n--)
int x;
cin>>x;
cnt[x]++;
if(cnt[x] > max)
max = cnt[x];
ans = x;
else if(cnt[x] == max)
if(x < ans) ans = x;
cout<<ans;
return 0;
Keep it simple and stupid
查找出现次数最多的数
三种思路:
- 最基本的:
- 排序,然后遍历
- 打擂法:
- 从第一个数开始,上擂台
- 后一个数如果与擂台上的一致,则守擂计数+1
- 后一个数如果与擂台上的不一致,则守擂计数-1
- 一旦守擂计数减为0,就将台上的数挤掉,然后刚刚打擂的数上台
- 类似上一种:
- 任意两个不同的数相互抵消,最后剩下的唯一个或多个相同的数就是最多的数
一旦找出最多的数,就可以重新遍历得到该数的出现次数了
以上是关于3192. 出现次数最多的数 13年12月CSP的主要内容,如果未能解决你的问题,请参考以下文章