问题描述
给定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<=si<=10000),就用空间换时间的方法,初始化data[10001] = {0},输入一个数d就让data[d]++,以此来计数。代码如下:
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int N;
int d;
int data[10001] ={0};
cin>> N;
for (int i=0; i<N; i++) {
cin >> d;
data[d]++;
}
int max=0;
int index;
for (int i=0; i<10001; i++) {
if (data[i]>0) {
if (data[i]>max) {
index = i;
max = data[i];
}
}
}
printf("%d\n",index);
return 0;
}