问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10
PS:最近这么拼命地看数据结构和算法就是为了开学以后考一下CCF认证考试~这道题是历届题做了一下~希望所有的努力都会有回报吧~希望到时候能取得一个好成绩
import java.util.*;
public class Main {
public static void main(String[] args) {
HashMap<Integer,Integer> hashMap = new HashMap<Integer,Integer>();
Scanner scan = new Scanner(System.in);
int temp = scan.nextInt();
for(int i = 0 ; i < temp ; i++)
{
int cnt = scan.nextInt();
if(hashMap.containsKey(new Integer(cnt))){
int value = hashMap.get(new Integer(cnt));
hashMap.put(new Integer(cnt), new Integer(++value));
}
else{
hashMap.put(new Integer(cnt), new Integer(1));
}
}
//查找
Iterator iter = hashMap.entrySet().iterator();
int number = 9999;//用于记录同等频率下最小的数字,出现最高频率的数字
int max = 0;//记录最高频率
//value表示出现的频率
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Integer key = (Integer) entry.getKey();
Integer val = (Integer) entry.getValue();
if(val > max)
{
number = key;
max = val;
}//用于寻找出现频率最高的数字
else if(val == max)
{
if(key < number)
number = key;
}
}
System.out.println(number);
}
}