问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
int n=in.nextInt();
ArrayList<Num> list=new ArrayList<>();
L:for(int i=0;i<n;i++) {
int temp=in.nextInt();
for(int j=0;j<list.size();j++) {
if(list.get(j).id==temp) {
list.get(j).count++;
continue L;
}
}
list.add(new Num(temp,1));
}
Collections.sort(list);
in.close();
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).id+" "+list.get(i).count);
}
}
}
class Num implements Comparable<Num>{
int id;
int count;
Num(int id,int count){
this.id=id;
this.count=count;
}
public int compareTo(Num obj) {
if(count>obj.count) {
return -1;
}else if(count==obj.count) {
if(id<obj.id) {
return -1;
}else if(id>obj.id) {
return 1;
}else {
return 0;
}
}else {
return 1;
}
}
}