題目:給定乙個非空的整數陣列,返回其**現頻率前 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...