Python程式:查詢具有相同最大頻數的最短子列表長度


假設我們有一個名為nums的數字列表。如果nums中出現頻率最高的數字的頻率為k,我們需要找到一個最短子列表的長度,使得其出現頻率最高的元素的頻率也為k。

因此,如果輸入類似於nums = [10, 20, 30, 40, 30, 10],則輸出將為3,因為這裡出現頻率最高的數字是10和30,k=2。如果我們選擇子列表[30, 40, 30],這是其中30出現且其頻率也為2的最短子列表。

為了解決這個問題,我們將遵循以下步驟:

  • L := nums的長度
  • rnums := nums的反轉
  • d := 一個對映,包含nums中每個元素的頻率
  • mx := d所有值的列表中的最大值
  • vs := 對於d中的每個k,如果d[k]與mx相同,則建立一個k的列表
  • mn := L
  • 對於vs中的每個v,執行:
    • mn := mn 和 (L - (v在rnums中的索引) - (v在nums中的索引)) 的最小值
  • 返回mn

示例

讓我們看看下面的實現,以便更好地理解:

from collections import Counter
def solve(nums):
   L = len(nums)
   rnums = nums[::-1]

   d = Counter(nums)
   mx = max(d.values())
   vs = [k for k in d if d[k] == mx]

   mn = L
   for v in vs:
      mn = min(mn, (L - rnums.index(v)) - nums.index(v))
   return mn

nums = [10, 20, 30, 40, 30, 10]
print(solve(nums))

輸入

[10, 20, 30, 40, 30, 10]

輸出

3

更新於:2021年10月14日

169 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

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