Python程序:按排名从高到低排列队伍最终排名
假设我们有一个名为votes的字符串列表,其中每个条目都小写字母表示,它们按从最高到最低的优先级顺序代表对候选人的投票。候选人的排名首先取决于其获得的最高优先级投票数量。如果出现平局,我们将检查其获得的次高优先级投票数量,依此类推。如果仍然存在平局,则将按字母顺序排列。因此,我们必须找到队伍的最终排名,按排名从高到低排列。
因此,如果输入类似于votes = ["zyx", "zxy", "xyz"],则输出将为"zxy",因为z获得了最多的最高优先级投票,因此排名第一。然后x获得了第二多的最高优先级投票,而y没有获得任何最高优先级投票。
为了解决这个问题,我们将遵循以下步骤:
- count := votes中字符串的长度
- cand := 一个空映射,其中每个键将是一个大小为count的列表,并且最初它们都填充为0
- 对于votes中的每个v,执行:
- 对于v中的每个索引i和值c,执行:
- 将cand[c, i]增加1
- 根据值以降序对cand项目进行排序,当值相同时,按字母顺序排序它们
- 通过连接排序后的元素返回一个字符串。
- 对于v中的每个索引i和值c,执行:
让我们看看下面的实现,以便更好地理解:
示例
from collections import defaultdict class Solution: def solve(self, votes): count = len(votes[0]) cand = defaultdict(lambda: [0] * count) for v in votes: for i, c in enumerate(v): cand[c][i] += 1 return "".join(sorted(cand.keys(), key=lambda x: (cand[x], -ord(x)), reverse=True)) ob = Solution() votes = ["zyx", "zxy", "xyz"] print(ob.solve(votes))
输入
["zyx", "zxy", "xyz"]
输出
zxy
广告