复旦大学上机题(一)
- 求众数。众数就是一个序列中出现次数最多的数字。如果不唯一,则输出小的那个值。给定第一个代表有几个数字。1<=n<=10^5,每个数字在
int 范围内。 - 输入样例:
8
10 3 8 8 3 2 2 2
- 输出样例:
2
package cn.liuliu;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("请输入数字个数");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println("请输入数字");
Scanner scan2 = new Scanner(System.in);
String a = scan2.nextLine();
String[] arr = new String[n];
arr = a.split(" ");//将输入的字符串切割
HashMap map = new HashMap();
for (int i = 0; i < n; i++) {
String arr11 = arr[i];
Object temp = map.get(arr11);//得到当前索引值的值
if (temp == null || temp.equals("")) {
map.put(arr11, 1);//第一次存入
} else {
int te = Integer.parseInt(String.valueOf(temp));//已经存在的,将值加一
te = te + 1;
map.put(arr[i], te);
}
}
int re = 0;//存储次数
String key1="";//当前出现最多的值
for (Object key : map.keySet()) {//遍历hasmap
int aa = Integer.parseInt(String.valueOf(map.get(key)));
if(aa>re){//次数比当前存储的次数多,换成这个次数
re = aa;
key1 = key.toString();
}else if(aa == re){//如果次数相同
if(Integer.parseInt(key.toString())<Integer.parseInt(key1)){//输出小的值
key1 = key.toString();
}
}
//System.out.println("key: " + key + "; value: " + map.get(key));
}
System.out.println(key1);//输出结果
}
}