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项目进行排序,当值相同时,按字母顺序排序它们
    • 通过连接排序后的元素返回一个字符串。

让我们看看下面的实现,以便更好地理解:

示例

在线演示

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

更新于:2020年12月2日

292 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告