问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
解析:这道题挺简单的,之所以发上来,主要是运用了HashMap 还有集合运算排序collections.sort(); 就相当于c++中的Map和sort(a,sizieof(a),cmp);
主要参考了如下博客:
Collections.sort对List排序的两种方法
https://blog.youkuaiyun.com/wxx614817/article/details/50628197
Map.EntrySet的用法
https://blog.youkuaiyun.com/nuoshueihe/article/details/7874069
话不多说,上代码:
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner cin=new Scanner(System.in);
n=cin.nextInt();
if(n<=0) return ;//n<=0时不输出
Map<BigInteger, Integer> map=new HashMap<BigInteger,Integer>();
for(int i=0;i<n;i++)
{
BigInteger k=cin.nextBigInteger();
if(map.containsKey(k))
map.replace(k,map.get(k)+1);
else
map.put(k, 1);
}
//将map.entrySet()转换成list
List<Map.Entry<BigInteger, Integer>> list =new ArrayList<Map.Entry<BigInteger, Integer>>(map.entrySet());
//排序
Collections.sort(list, new Comparator<Map.Entry<BigInteger, Integer>>() {
public int compare(Map.Entry<BigInteger, Integer> o1, Map.Entry<BigInteger, Integer> o2) {
if(o1.getValue()==o2.getValue())
//值相等,按key从小到大排列 compare相当于c++中的小于号
return (o1.getKey()).compareTo(o2.getKey());
else
return (o2.getValue()).compareTo(o1.getValue());
//如果对应值不等,按值从大到小排列
}
});
System.out.println(list.get(0).getKey());
cin.close();
return;
/* int count=0;
for (Map.Entry<Integer, Integer> mapping : list) {
System.out.println(mapping.getKey());
count++;
if(count==1) break;
} */
//显示
/*for (int i = 0; i < list.size(); i++) {
Entry<Integer, Integer> id = list.get(i);
System.out.println(id);
}*/
}
}
测试样例:
详细记录 |
|