【问题描述】
一组数据中出现最多的数,称为众数。比如
1 2 3 3
众数为3。一组数据中也可能有多个众数,以最先出现的作为众数。比如
2 2 3 3
众数为2。
问题是一组按升序排好的数据,指出它的众数。
【输入形式】
有多组测试数据(不超过100组测试数据)。
每组测试数据占两行,第一行是正整数N:表示这组测试数据中数据项数。
第二行是N个用空格隔开的正整数,表示这组测试数据的数据元素。每个数据元素都不大于10000。
N=0,表示输入结束,并且不需要处理。
40%的测试数据N 1 ≤N≤ 10;
30%的测试数据N 10 < N≤ 100;
20%的测试数据N 100 < N≤ 1000;
10%的测试数据N 1000 < N≤ 10000;
【输出形式】
对于每组测试数据,输出一行包含一个正整数:对应的众数。
【样例输入】
4
1 2 3 3
4
2 2 3 3
0
【样例输出】
3
2
import java.util.HashMap;
import java.util.Scanner;
public class 众数 {
public static void method1() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n > 0) {
int pre = 0;
int count = 0;
int much = 0;
int result = 0;
for (int j = 0; j < n; j++) {
int num = sc.nextInt();
if (j == 0) {
pre = num;
result = num;
count = 1;
much = 1;
} else {
if (pre == num) {
count++;
if (count > much) {
much = count;
result = num;
}
} else {
pre = num;
count = 1;
}
}
}
System.out.println(result);
n = sc.nextInt();
}
}
public static void method2() {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int num = 0;
while (n > 0) {
int[] arr = new int[10001];
int maxCount = 0;
for (int i = 0; i < n; i++) {
num = sc.nextInt();
arr[num]++;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] > maxCount) {
maxCount = arr[i];
num = i;
}
}
System.out.println(num);
n = sc.nextInt();
}
}
public static void main(String[] args) {
method1();
}
}