欢迎访问我的CCF认证解题目录
题目描述
思路过程
题目给定一些数字,让这些数字按次数降序、数字升序的形式输出,给定的数字不会超过1000,且是非负数。
我们可以定义一个长度为1005的数组保存数字和次数两个信息,读入数据,然后按要求排序即可
代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Node[] node = new Node[1005];//记录数字和对应出现的次数
for ( int i = 0; i < node.length; i++ ) {//初始化
node[i] = new Node();
node[i].index = i;
}
while ( n-- != 0 ) node[in.nextInt()].cnt++;//次数+1
Arrays.sort(node, new Comparator<Node>() {//按次数降序,数字升序
@Override
public int compare(Node o1, Node o2) {
if ( o1.cnt != o2.cnt ) {
return o2.cnt - o1.cnt;
} else return o1.index - o2.index;
}
});
for ( int i = 0; i < node.length; i++ ) {//输出
if ( node[i].cnt == 0 ) break;
System.out.println(node[i].index+" "+node[i].cnt);
}
}
}
class Node {
int index, cnt;//index是数字,cnt是对应出现的次数
}