出现次数最多的数
问题描述
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
10 1 10 20 30 20
样例输出
10
我的代码:
public class test01 { public static void main(String []args){ System.out.println("样例输入"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int n[]=new int[num]; for(int i=0;i<num;i++){ n[i]=sc.nextInt(); } sc.close(); int temp=0,count,countmax=0; for(int i=0;i<num;i++){ count = 0; for(int j=i;j<num;j++){ if(n[i]==n[j]){ count++; } } if(count>countmax){ countmax = count; temp = n[i]; }else if(count == countmax){ if(temp > n[i]){ temp = n[i]; } } } System.out.println("样例输出"); System.out.println(temp); } }
参考答案代码:(更简洁)
import java.util.*; public class Main { public static void main(String[] args) { new Main().run(); } public void run() { Scanner fin = new Scanner(System.in); int N = fin.nextInt(); int[] count = new int[10001]; for (int i = 0; i < N; ++i) { ++count[fin.nextInt()]; } int maxCount = -1; int result = 0; for (int i = 1; i <= 10000; ++i) { if (count[i] > maxCount) { maxCount = count[i]; result = i; } } System.out.println(result); } }