题解 | #成绩排序#java利用priorityQueue优先队列来计算,思路简单易懂
成绩排序
http://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(bf.readLine());
int isAsc = Integer.parseInt(bf.readLine());
/*
因为有String和int,所以干脆直接存放String,也可以搞个list存放String,然后queue里面存放list的索引,这样更加快一点。
1、String[]的结构{姓名,分数,先后顺序的索引}
2、先判断两个分数是否相同
1)相同按照时间排序
2)不同按照分数的asc或者desc
*/
PriorityQueue<String[]> queue = new PriorityQueue<>((a, b) -> a[1].equals(b[1]) ? Integer.parseInt(a[2]) - Integer.parseInt(b[2]) : isAsc == 0 ? Integer.parseInt(b[1]) - Integer.parseInt(a[1]) : Integer.parseInt(a[1]) - Integer.parseInt(b[1]));
for (int i = 0; i < cnt; i++) {
String[] path = bf.readLine().split(" ");
queue.offer(new String[]{path[0], path[1], String.valueOf(i)});
}
while (!queue.isEmpty()) {
String[] res = queue.poll();
System.out.println(res[0] + " " + res[1]);
}
}
}