Python 中 Top K 頻繁元素


假設我們有一個非空整數陣列。我們需要返回第 k 個最頻繁的元素。例如,如果元素是 [1,1,1,1,2,2,3,3,3] 並且 k = 2,則結果將是

正式地說,函式應該:

  • 如果存在 i、j、k
  • 使得 arr[i] < arr[j] < arr[k],其中 0 ≤ i < j < k ≤ n-1,則返回 true;否則返回 false。

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

  • num_freq = 一個空對映,freq_list := 一個空對映
  • 對於 nums 中的每個元素 i
    • 如果 i 不在 num_freq 中,則 num_freq[i] := 1,否則將 num_freq[i] 加 1
  • 對於 num_freq 對映中的每個鍵值對
    • 如果值不在 freq_list 中,則 freq_list[value] := 一個包含 [key] 的列表,否則將 key 插入到 freq_list[value] 陣列中
  • res := 空列表
  • 對於 i := 數字長度到 0
    • 如果 i 在 freq_list 中,則將 freq_list[i] 的元素新增到 res 中
    • 如果 res 的長度 >= k,則中斷
  • 返回結果

讓我們看下面的實現來更好地理解:

示例

 線上演示

class Solution(object):
   def topKFrequent(self, nums, k):
      number_frequency = {}
      frequency_list ={}
      for i in nums:
         if i not in number_frequency:
            number_frequency[i] = 1
         else:
            number_frequency[i] += 1
      for key,value in number_frequency.items():
         if value not in frequency_list:
            frequency_list[value] = [key]
         else:
            frequency_list[value].append(key)
      result = []
      for i in range(len(nums),0,-1):
         if i in frequency_list:
            result.extend(frequency_list[i])
         if len(result) >=k:
            break
      return result
ob1 = Solution()
print(ob1.topKFrequent([1,1,1,1,2,2,3,3,3], 2))

輸入

[1,1,1,1,2,2,3,3,3]
2

輸出

[1, 3]

更新於:2020年5月4日

2K+ 次瀏覽

開啟你的 職業生涯

完成課程獲得認證

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