题解 | #成绩排序#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]);
        }
    }
}
全部评论

相关推荐

评论
6
1
分享
牛客网
牛客企业服务