201312-1-出现次数最多的数

题目

问题描述
  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
  输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10

我的解题代码

#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
	int num,i,max=0,maxi=0;
	int a[10001];
	for(i=0;i<10001;i++)
		a[i]=0;
	cin>>num;
	while(num--)
	{
		cin>>i;
		a[i]++;
	}
	for(i=10000;i>0;i--)
		if(a[i]>=max)
		{
			max=a[i];
			maxi=i;
		}
	cout<<maxi;
	return 0;
}

我的思路

用数组下标表示输入的值,数组值表示该值出现的次数,所以在输入时就可以实时统计该值出现的次数,然后对数组进行从后向前扫描,不断刷新最大次数和对应的值,同时自动解决了取相同次数最小值的问题

参考答案及注释解析

#include <iostream> 
# include <cstdio> 
# include <string> 
# include <vector> 
# include <deque> 
# include <list> 
# include <map>
using namespace std;
int main() {
	int n;
	cin >> n;
	map<int, int> f;//申请map<int,int>,默认初始化为0,对基本类型的key以降序排列
	for ( int i = 0; i < n; i++ ) {
		int t;
		cin >> t;
		f[t]++;//统计次数
	}
	int ans, m = 0;
	for ( map<int, int>::iterator it = f.begin(); it != f.end(); it++ ) {
		if ( it->second > m ) {
			m = it->second;
			ans = it->first;//寻找最大次数,同时key的默认排序实现了同次数取小
		}
	}
	cout << ans << endl;//输出出现最大次数的值
	return(0);
}
发布了17 篇原创文章 · 获赞 0 · 访问量 264

猜你喜欢

转载自blog.csdn.net/qq_41985293/article/details/104105477
今日推荐