试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。样例输入125 2 3 3 1 3 4 2 5 2 3 5样例输出3 42 35 31 14 1评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
解题代码(java):
import java.util.*;public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int N=scanner.nextInt(); int []arr=new int[N]; for(int i=0;i<arr.length;i++){ arr[i]=scanner.nextInt(); } Map<Integer,Integer> map=new HashMap<Integer,Integer>(); for(int i=0;i<arr.length;i++){ if(map.containsKey(arr[i])){ map.put(arr[i], map.get(arr[i])+1); }else{ map.put(arr[i], 1); } } //hashmap按value值遍历 List<Map.Entry<Integer, Integer>> list_Data = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet()); Collections.sort(list_Data, new Comparator<Map.Entry<Integer, Integer>>() { public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) { if(o2.getValue().compareTo(o1.getValue())>0){//按value递减顺序排序 return 1; } else if(o2.getValue().compareTo(o1.getValue())==0){ if(o2.getKey().compareTo(o1.getKey())<0)//如果value相同输出key小的 return 1; else return -1; } else{ return -1; } } }); // System.out.PRintln(list_Data);//次输出格式为:[3=4, 5=3, 2=3, 4=1, 1=1] for(Map.Entry<Integer, Integer> v:list_Data){//按着输出格式遍历输出结果 System.out.println(v.getKey()+" "+v.getValue()); } }}
新闻热点
疑难解答