1366. Rank Teams by Votes

63 阅读1分钟

image.png

image.png

方法

class Solution {
    public String rankTeams(String[] votes) {
        int size = votes[0].length();
        //  rank[i][j] 表示第 i 队 第 j 名的票数
        int[][] rank = new int[26][size + 1];
        for (String vote : votes) {
            for (int i = 1; i <= size; i++) {
                rank[vote.charAt(i - 1) - 'A'][i]++;
            }
        }
        //将 0 号位置作为 id, 方便后续计算
        for (int i = 0; i < 26; i++) {
            rank[i][0] = i;
        }

        // 按照降序排
        Arrays.sort(rank, (a, b) -> {
            // 比较每一个位次,看谁更大
            for (int i = 1; i <= size; i++) {
                if (a[i] < b[i]) {
                    return 1;
                } else if (a[i] > b[i]) {
                    return -1;
                }
            }
            return a[0] - b[0]; // 如果各个位次票数都一样,直接比字母大小
        });


        // 不需要去判断 26 个 id,没有参赛的 id 票数都为 0,肯定都是排在最后
        String res = "";
        int count = 0;
        for (int[] arr : rank) {
            res += (char)(arr[0] + 'A');
            count ++;
            if (count == size) {
                break;
            }
        }

        return res;
    }
}