通过投票对团队排名

111 阅读1分钟

现在有一个特殊的排名系统,依据参赛团队在投票人心中的次序进行排名,每个投票者都需要按从高到低的顺序对参与排名的所有团队进行排位。

排名规则如下:

参赛团队的排名次序依照其所获「排位第一」的票的多少决定。如果存在多个团队并列的情况,将继续考虑其「排位第二」的票的数量。 以此类推,直到不再存在并列的情况。 如果在考虑完所有投票情况后仍然出现并列现象,则根据团队字母的字母顺序进行排名。 给你一个字符串数组 votes 代表全体投票者给出的排位情况,请你根据上述排名规则对所有参赛团队进行排名。 请你返回能表示按排名系统 排序后 的所有团队排名的字符串。

输入:votes = ["BCA","CAB","CBA","ABC","ACB","BAC"]
输出:"ABC"

输入:votes = ["ABC","ACB","ABC","ACB","ACB"]
输出:"ACB"

输入:votes = ["ZMNAGUEDSJYLBOPHRQICWFXTVK"]
输出:"ZMNAGUEDSJYLBOPHRQICWFXTVK"

输入:votes = ["M","M","M","M"]
输出:"M"

function rankTeams(votes){
            if(!votes.length) return '';
            if(votes.length == 1) return votes[0];
            if(votes[0].length == 1) return votes[0];

            let arr = [];
            for(let i = 0;i< votes[0].length;i++){
                arr[i] = {
                    key:votes[0][i],
                    val:''
                }
            }

            for(let i = 0; i < votes[0].length; i++){
                let hash = {};
                for(let j = 0; j < votes.length; j++){ 
                    hash[votes[j][i]] = ~~hash[votes[j][i]] + 1;
                }
                for(let k = 0; k < arr.length; k++){
                    let c = hash[arr[k].key] ? hash[arr[k].key] + '': '000';
                    if (c.length === 1){
                        c = "00" + c;
                    }else if(c.length === 2){
                        c = '0' + c;
                    }
                    arr[k].val += c;
                }
            }
            arr.sort(function(a,b){
                if(a.val === b.val){
                    return a.key > b.key ? 1 : -1;
                }else{
                    return b.val - a.val;
                }
            })
            let res = '';
            for(let i =0;i<arr.length;i++){
                res +=arr[i].key;
            }
            return res;
        }