用Python编写程序,按从高到低排名的顺序找出团队的最终排名

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

让我们看看以下实现,以获得更好的理解—

更多Python相关文章,请阅读:Python 教程

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程