第 178 场力扣周赛 第二题

题目

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

排名规则如下:

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

请你返回能表示按排名系统 排序后 的所有团队排名的字符串。

样例

示例 1:

输入:votes = [“ABC”,”ACB”,”ABC”,”ACB”,”ACB”]
输出:”ACB”
解释:A 队获得五票「排位第一」,没有其他队获得「排位第一」,所以 A 队排名第一。
B 队获得两票「排位第二」,三票「排位第三」。
C 队获得三票「排位第二」,两票「排位第三」。
由于 C 队「排位第二」的票数较多,所以 C 队排第二,B 队排第三。
示例 2:

输入:votes = [“WXYZ”,”XYZW”]
输出:”XWYZ”
解释:X 队在并列僵局打破后成为排名第一的团队。X 队和 W 队的「排位第一」票数一样,但是 X 队有一票「排位第二」,而 W 没有获得「排位第二」。
示例 3:

输入:votes = [“ZMNAGUEDSJYLBOPHRQICWFXTVK”]
输出:”ZMNAGUEDSJYLBOPHRQICWFXTVK”
解释:只有一个投票者,所以排名完全按照他的意愿。
示例 4:

输入:votes = [“BCA”,”CAB”,”CBA”,”ABC”,”ACB”,”BAC”]
输出:”ABC”
解释:
A 队获得两票「排位第一」,两票「排位第二」,两票「排位第三」。
B 队获得两票「排位第一」,两票「排位第二」,两票「排位第三」。
C 队获得两票「排位第一」,两票「排位第二」,两票「排位第三」。
完全并列,所以我们需要按照字母升序排名。
示例 5:

输入:votes = [“M”,”M”,”M”,”M”]
输出:”M”
解释:只有 M 队参赛,所以它排名第一。

class Solution {

    /**
     * @param String[] $votes
     * @return String
     */
    function rankTeams($votes) {
        if(strlen($votes[0]) == 1) return $votes[0]; 
        //所有参赛队伍
        $team = str_split($votes[0]);
        $voteCount = array();
        //初始化
        foreach ($team as $key => $value) {
            $voteCount[$value] = array();
            for ($i=0; $i < count($team); $i++) { 
                $voteCount[$value][$i+1] = 0;
            }
        }
        //得到投票结果
        for ($i=0; $i < count($votes); $i++) { 
            //每一个人的投票结果
            $str = $votes[$i];
            for ($j=0; $j <strlen($str); $j++) {
                $voteCount[$str[$j]][$j+1]++;
            }
        }

        ksort($voteCount);
        uasort($voteCount, array($this, 'cmp'));
        $result = implode('', array_keys($voteCount));
        return $result;
    }
    //自定义排序算法
    function cmp($a, $b){
        for ($i=1; $i <= count($a); $i++) { 
            if($a[$i] > $b[$i]) return -1;
            if($a[$i] == $b[$i]) continue;
            if($a[$i] < $b[$i]) return 1;
        }
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!