給定乙個非空的整數陣列,返回其**現頻率前 k 高的元素。
示例 1:
輸入: nums = [1,1,1,2,2,3], k = 2
輸出: [1,2]
示例 2:
輸入: nums = [1], k = 1
輸出: [1]
你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。
你的演算法的時間複雜度必須優於 o(n log n) , n 是陣列的大小。
題目資料保證答案唯一,換句話說,陣列中前 k 個高頻元素的集合是唯一的。
你可以按任意順序返回答案。
以下是python3的**:
class
solution
:def
topkfrequent
(self, nums: list[
int]
, k:
int)
-> list[
int]
:if list==
none
:return
from collections import counter
b =dict
(counter(nums)
)#計算重複元素
#根據value進行排序,sort為列表型別,其元素為(key,value)元組型別
sort =
sorted
(b.items(
),key =
lambda x:x[1]
,reverse=
true
) n=
[i[0
]for i in sort[
:k]]
#取前k個高頻元素的key
也可以使用以下迴圈計算重複元素,hash為字典型別:
for i in a:
hash[i]
= hash.get(i,0)
+1
對於sorted函式的使用以及使用的排序演算法,請參考以下github: 347 前K個高頻元素
給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...
347 前 K 個高頻元素
維護乙個size是k的堆。求前k大的數,用小根堆 求前k小的數,用大根堆 求前k大,當堆的sizek時,去掉堆頂,最終堆中的資料就是最後的答案。如陣列arr 求最大的前3個數 一般來說求前k大 小,陣列中數是很大的,直接用排序,在選擇前k大 小的話,效率不高 首先建立堆,其size 0,一直push...
347 前 K 個高頻元素
方法很好想,要麼暴力排序,歸併,堆排都能滿足o nlogn 的要求。我第一次想到的就是,用雜湊統計一下數字,然後過載排一下序,順序放入集合裡就行。這次用的是最小堆,主要學習一下priorityqueue,是基於優先順序堆的無界優先順序queue modifier and type method an...