一.题目
系统会给出一个长度为N的数列an,请你输出其中出现次数最多的数.如果出现次数最多的数有多个,请输出最小的那一个。
输入描述 第一行,一个正整数N 第二行,N个正整数a i 数据保证: 1≤N≤10e5 1≤ai≤10e5 输出描述
一个正整数,为数列中出现次数最多的数中最小的那个。
用例输入
4
1 1 2 2
用例输出
1
用例输入
3
1 2 2
用例输出
2
二、代码+详解
#include <bits/stdc++.h>
using namespace std;
**//首先定义一个a数组用来输入,而再创造一个b数组来统计次数
//桶排序的思想,如果了解桶排序可以去看看**
int a[10001],b[10001]={0};
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
//每输一次就统计一次
b[a[i]]++;
}
//在定义两个变量,一个用来求出现的最多次数,一个用来求最小值
int max=-1234;
int min=-1234;
for(int i=0;i<n;i++)
{
//暴力比较
if(b[a[i]]>max)
{
max=b[a[i]];
//这里要给min赋值为第一次出现最大值对应的a[i],不然你输出就min初始的值
min=a[i];
}
}
for(int i=0;i<n;i++)
{
if(b[a[i]]==max&&a[i]<min)
{
//这里与上面同理,直接比较
min=a[i];
}
}
printf("%d\n",min);
return 0;
}