算法训练 出现次数最多的整数
时间限制:1.0s 内存限制:512.0MB
问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
100
150
150
200
250
样例输出
150
注意:题目有一组恶心且垃圾的数据!!!
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
int[] butong = new int[30];
int[] cishu = new int[30];
int n;
n = cin.nextInt();
if(n <= 0) { //坑!!!!!!!!!!!!!智障吧,整数的个数还可能小于0!!!!
return ;
}
int bt = 0, x;
// HashMap<int, int> map = new HashMap<int, int>();
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < n; i++) {
x = cin.nextInt();
if(map.containsKey(x)) {
map.put(x, map.get(x)+1);
}
else {
map.put(x,1);
butong[bt++] = x;
}
}
int mx = -1;
int mm = -0x3f3f3f3f;
for(int i = 0; i < bt; i++) {
int cii = map.get(butong[i]);
if( cii > mx) {
mx = cii;
mm = butong[i];
}
if(cii == mx) {
if(mm > butong[i]) {
mm = butong[i];
}
}
}
System.out.println(mm);
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
if(n <= 0) { //坑!!!!!!!!!!!!!智障吧,整数的个数还可能小于0!!!!
return ;
}
long x, cnt = 0, min = -0x3f3f3f3f;
long bf = -0x3f3f3f3f;
long dangci = 0;
for(int i = 0; i < n; i++) {
x = cin.nextLong();
if(x == bf) {
dangci++;
}
else {
if(cnt < dangci) {
cnt = dangci;
min = bf;
}
else if(cnt == dangci && min > bf) {
cnt = dangci;
min = bf;
}
bf = x;
dangci = 1;
}
}
if(cnt < dangci) {
cnt = dangci;
min = bf;
}
else if(cnt == dangci && min > bf) {
cnt = dangci;
min = bf;
}
System.out.println(min);
}
}