CCF—出现次数最多的数
2016-04-05 19:27
323 查看
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
时间限制:1.0s,内存限制:256MB
=======================================================分隔线=====================================================================
解法一:
一开始我的想法是:设置一个长度为10000的数组,初值为0。数组元素a[i]的下标i代表数字,元素的a[i]的值代表这个数字出现的个数。以样例为例,a[i]=1,a[10]=2,a[20]=2,a[30]=1.
设置两个int型的值,maxcnt和maxval。
IF MAXCNT<a[i]
MAXCNT=a[i]
MAXVAL=i
ELSE IF MAXCNT=a[i]
MAXVAL=i
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
时间限制:1.0s,内存限制:256MB
=======================================================分隔线=====================================================================
解法一:
一开始我的想法是:设置一个长度为10000的数组,初值为0。数组元素a[i]的下标i代表数字,元素的a[i]的值代表这个数字出现的个数。以样例为例,a[i]=1,a[10]=2,a[20]=2,a[30]=1.设置两个int型的值,maxcnt和maxval。
IF MAXCNT<a[i]
MAXCNT=a[i]
MAXVAL=i
ELSE IF MAXCNT=a[i]
MAXVAL=i
int main(){ clock_t start = clock(); const int N1=10000; int a[N1]; for(int i=0; i<N1;i++) a[i]=0; int n; cin >> n; int num; for(i=0; i<n; i++){ cin >> num; a[num] +=1; } // a[1]=1; a[4]=2; a[5]=1; // for(i=0; i<N1;i++) cout << a[i] << ' '; int maxcount=a[0], maxvalue = 0; for(i=0; i<N1;i++){ if(maxcount < a[i]){ maxcount = a[i]; maxvalue = i; } else if(maxcount==a[i]){ if(a[i]==0) continue; maxvalue = i; } } cout << maxvalue << endl; clock_t finish = clock(); cout << "程序运行了" << finish-start << "毫秒" << endl; return 0; }但是,这样的话程序运行时间太长,不合格。
解法二:
用map容器。头文件加入<map>。int main(){ clock_t start = clock(); map<int,int> f; int m,n; int maxcnt=0, maxval; cin >> n; // n=6; for(int i=0; i<n; i++){ cin >> m; f[m]++; } for(map<int,int>::iterator it=f.begin(); it!=f.end(); it++){ if(maxcnt < it->second){ maxcnt=it->second; maxval=it->first; } if(maxcnt == it->second){ if( maxval < it->first) maxval = it->first; } } cout << maxval << endl; clock_t finish = clock(); cout << "程序运行了" << finish-start << "毫秒" << endl; return 0; }
相关文章推荐
- Android 沉浸式状态栏
- 052(十六)
- 算法训练 矩阵加法
- 关于OC中的委托
- c++:私有继承,公有继承,保护继承
- 猜数字游戏
- JAVA环境变量的配置及常用工具说明
- openjudge SDAU 链表 构造单向链表
- linux配置ftp服务器
- 整合iBatis和Spring之SqlMapClientDaoSupport
- 环境变量的配置
- 利用gulp构建你的项目
- Main()方法
- Android记录一个setTextColor常见的一个bug
- 扬声器听筒的切换
- 算法训练 邮票
- 增长黑客(Growth Hacker)介绍
- BestCoder-四条边是否能组成四边形
- 时间类2
- Windows API GetProcAddress 及demo code