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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.