问题描述
试题编号: 201312-1
试题名称: 出现次数最多的数
时间限制: 1.0s
内存限制: 256.0MB
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
思路
该题思路较为简单,根据题目中所提的要求,我们需要对每一个出现的数字进行计数,找出出现次数最多的数,同时如果多个数字出现次数相同,则要输出最小的数。
我们可以使用vector来存储这些数字,在进行计数之前,先使用堆排序将数字进行排序,循环一次遍历出现的所有数字,如果当前数字与后面的数字相同,则计数值加一,同时设置出现最多次数变量记录出现的最多次数,如果当前计数值大于该变量,则所保存的出现最多次数值变为当前计数值同时结果变为当前数组值。若当前数字与后面的数字不同,则计数值重新变为1.
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> vec;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
vec.push_back(a);
}
sort(vec.begin(),vec.end());
int MAX=0;//出现最多次数
int num=1;//当前出现次数
int res=vec[0];//记录结果
for(int i=0;i<n-1;i++)
{
if(vec[i]==vec[i+1])
{
num++;
if(num>MAX)//当前出现次数大于最多出现次数
{
MAX=num;//更新最多出现次数变量
res=vec[i];//更新结果值
}
}
else//当前数字与后面数字不同
{
num=1;//重置计数值
}
}
cout<<res;
return 0;
}