演算法 前 K 個高頻元素

2021-10-24 10:51:27 字數 1055 閱讀 4778

題目:給定乙個非空的整數陣列,返回其**現頻率前 k 高的元素。

例如輸入: nums = [1,1,1,2,2,3], k = 2

輸出: [1,2]

題解

思路還是比較清晰的

1,先初始化乙個map,通過遍歷,將每個元素的次數統計出來

2,取次數中的前k個元素。

關鍵是第二步怎麼取。如果通過排序來取的話,時間複雜度肯定是相對高一些。

官網解法是通過大頂堆來取值。堆的演算法可以自己寫,也可以用python自帶的heapq模組。

另外吧,我覺得也可以直接取。先取最大的,然後將其從map中pop出來。然後取下乙個,直到取夠k個。

時間複雜度為 n + n-1 + n-2 +…n-k

code

class

solution

:def

topkfrequent

(self, nums: list[

int]

, k:

int)

-> list[

int]

: dic =

for i in nums:

if i in dic.keys():

dic[i]+=1

else

: dic[i]=1

keys = dic.keys(

) res =

while k>0:

temp =[0

,-float

('inf')]

for i in keys:

if temp[1]

< dic[i]

: temp[0]

= i temp[1]

= dic[i]

dic.pop(temp[0]

)0])

k-=1return res

前 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...

前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...

前 K 個高頻元素

題目 給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。eg 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 eg 輸入 nums 1 k 1 輸出 1 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log n n...