LeetCode Contest 178 1366. 通过投票对团队排名 Rank Teams by Votes

时间:2023-01-07小编:迷失传奇版本

TableofContents

一、中文版

二、英文版

三、Myanswer

四、解题报告

一、中文版

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

排名规则如下:

参赛团队的排名次序依照其所获「排位第一」的票的多少决定。如果存在多个团队并列的情况,将继续考虑其「排位第二」的票的数量。以此类推,直到不再存在并列的情况。

如果在考虑完所有投票情况后仍然出现并列现象,则根据团队字母的字母顺序进行排名。

给你一个字符串数组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队参赛,所以它排名第一。

提示:

1<=votes.length<=1000

1<=votes[i].length<=26

votes[i].length==votes[j].lengthfor0<=i,j

votes[i][j]是英文大写字母

votes[i]中的所有字母都是唯一的

votes[0]中出现的所有字母同样也出现在votes[j]中,其中1<=j

二、英文版

三、Myanswer

classSolution:defrankTeams(self,votes:List[str])->str:teams=list(votes[0])count_dict={}forteaminteams:count_dict[team]=[0]*len(teams)forvoteinvotes:fori,tinenumerate(vote):count_dict[t][i]-=1list1=sorted(count_dict.items,key=lambdax:(x[1],x[0]))#注意(x[1],x[0])要有括号,否则中间的逗号有歧义,报错:Line12:SyntaxError:positionalargumentfollowskeywordargumentreturn"".join(x[0]forxinlist1)

四、解题报告

1、count_dict[t][i]-=1

使用lambda给字典进行排序,x[1]表示获得的票数,理应越多越靠前;x[0]是字母,理应越小越靠前。但由于写在一个表达式里,不能同时做到一个递减排序(越多越靠前)一个递减排序(越小越靠前),所以在计数count时不是+=1,而改为-=1,因为负数满足条件。例如:

[1,2,3]和[1,3,2]若是list自带的排序方式是[1,2,3]<[1,3,2],所以[1,2,3]在前,而本题中希望[1,3,2]在前。若变成负数:

[-1,-2,-3]和[-1,-3,-2]list自带排序结果是[-1,-3,-2]<[-1,-2,-3],-3仍表示获得3票,大于2票,应靠前。所以此法满足越小越靠前,跟x[1]表示的按字母排序一致,都是从小到大排序。

2、return"".join(x[0]forxinlist1)

列表解析式,把数组变成字符串。list1样例:

[('A',[-5,0,0]),('C',[0,-3,-2]),('B',[0,-2,-3])],可见list1中是元祖,要每个元祖的第一个,即参赛团队字母编码



展开

上一篇:zoom直播透露WE一整个赛季的投入为1000w!我在想一个问题,像WE这种俱乐部这种小投入能不能做

下一篇:还有两周国服就关了,突然感觉自己的游戏动力被抽干了一般,完全想上线了,NAXX匕首一直不出,成就龙拖

相关内容更多
热门攻略更多
返回顶部