感悟
这个题就是CCF常考题得缩影,简单版。即map里根据value值排序输出。类似得好几道题都用到了这个知识。比如CCF 201312-1 出现次数最多的数 也是用map存,最后输出value最大的key
代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class CCF2015032 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i < n; i++) {
int num = sc.nextInt();
if(map.containsKey(num)) {
map.put(num, map.get(num)+1);
}else {
map.put(num, 1);
}
}
// 下面这部分在好几个题里都有用到。
ArrayList<Map.Entry<Integer,Integer>> arrayList = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
Collections.sort(arrayList,new Comparator<Map.Entry<Integer,Integer>>(){
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
// TODO Auto-generated method stub
//按照Value从大到小,若Value相同,再按照Key从小到大
int result = o2.getValue() -o1.getValue();
if(result != 0) {
return result;
}else {
return o1.getKey()-o2.getKey();
}
}
});
//遍历list得到map里面排序后的元素
for(Entry<Integer,Integer> en: arrayList) {
System.out.println(en.getKey()+" "+ en.getValue());
}
}
}