问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
java1:
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList n_v = new ArrayList();
int n, t;
Scanner s = new Scanner(System.in);
n = s.nextInt();
for (int i = 0; i <= 10000; i++) {
n_v.add(0);
}
for (int i = 0; i < n; i++) {
t = s.nextInt();
n_v.set(t, (int)n_v.get(t)+1);
}
int maxs=0, m_i=0;
for (int i = 0; i <= 10000; i++) {
if(maxs<(int)n_v.get(i)){
maxs = (int)n_v.get(i);
m_i = i;
}
}
System.out.println(m_i);
}
}
java2:
import java.util.*;
public class Main {
public static Comparator<P> comp = new Comparator<P>() {
@Override
public int compare(P p, P t1) {
if(p.count!=t1.count){
return p.count>t1.count?-1:1;
}
else{
return p.num<t1.num?-1:1;
}
}
};
public static void main(String[] args) {
int n,t;
Scanner s = new Scanner(System.in);
n = s.nextInt();
ArrayList<P> p_v = new ArrayList<P>();
for (int i = 0; i < n; i++) {
t = s.nextInt();
int index=p_v.indexOf(new P(t, 1));
if (index==-1){
//没找到
p_v.add(new P(t, 0));
}
else{
//找到了
p_v.set(index,new P(t, p_v.get(index).count+1));
}
}
Collections.sort(p_v, comp);
System.out.println(p_v.get(0).num);
}
}
class P{
int num;
int count;
P(int _num, int _count){
num = _num;
count = _count;
}
@Override
public boolean equals(Object o) {
P p=(P) o;
if (p.num == this.num)
return true;
else return false;
}
}