题解 | #成绩排序#

变态题,有名字重复的场景发生,例子没有
这里把名字和加入顺序作为map的key,这样就必然不会有map加入重复key导致数据丢失
垃圾题目!!!如果不给看错误原因,鬼知道

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        int factor = Integer.parseInt(sc.nextLine());

        Map<String, String> scoreMap = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String[] strs = sc.nextLine().trim().split(" ");
            // 华为的变态题,有名字重复的场景发生,例子没有
            // 这里把名字和加入顺序作为map的key,必然不会有重复数据的抵消发生
            // 垃圾题目!!!如果不给看错误原因,鬼知道!
            scoreMap.put(strs[0] + " " + i, strs[1]);
        }

        List<Map.Entry<String, String>> listEntry = new ArrayList<>(scoreMap.entrySet());
        listEntry.sort(new Comparator<Map.Entry<String, String>>() {
            @Override
            public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                int score1 = Integer.parseInt(o1.getValue());
                int score2 = Integer.parseInt(o2.getValue());
                if (score1 != score2) {
                    if (factor == 1) {
                        return score1 - score2;
                    } else {
                        return score2 - score1;
                    }
                } else {
                    int start1 = Integer.parseInt(o1.getKey().split(" ")[1]);
                    int start2 = Integer.parseInt(o2.getKey().split(" ")[1]);
                    return start1 - start2;
                }
            }
        });
        for (Map.Entry<String, String> entry : listEntry) {
            System.out.println(entry.getKey().split(" ")[0] + " " + entry.getValue());
        }
    }
}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务