蓝桥杯记录
算法训练 出现次数最多的整数
问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,0< N< 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150
解题思路
题目很简单,解题就不多写了,主要想记录Map类的排序方法。
原本用的是HashMap,后来看到TreeMap是直接排序的,就改成了TreeMap。但是发现是按照Key排序的,所以还是只能用其他方法来将键值对按照Value排序。
TreeMap按照value进行排序
https://www.cnblogs.com/Berryxiong/p/6240514.html
Java中Collections.sort()排序详解
https://blog.csdn.net/xx326664162/article/details/52227690
若一个类实现了Comparable接口,就意味着“该类支持排序”。 List列表(或数组),里面的元素是实现了Comparable接口的类,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。思路是把TreeMap的EntrySet转换成list,然后使用Collections.sort排序。
定义一个列表,元素类型限定为Map类Entry接口,函数参数为存放数据的TreeMap:nums的键值对
List<Entry<Integer,Integer>> list = new List<Entry<Integer,Integer>>(nums.entrySet());
然后通过 Collections.sort排序,这个函数有两种参数列表:
这里用第一种
Comparations.sort(list , new Comparator<Map.Entry<Integer,Integer>(){
public int compare(Entry<Integer,Integer> num1,Entry<Integer,Integer> num2){
return num1.getValue().compareTo(num2.getValue());
}
});
compareTo()方法,如果调用该方法的对象比参数对象大,返回结果>0;相等,等于0;小,返回结果<0。
完整代码如下
import java.util.*;
import java.util.Map.Entry;
public class 出现最多的整数 {
public static void main(String[] args)