用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,请执行以下操作:
让我们看看以下实现,以获得更好的理解—
更多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