347 前 K 個高頻元素 Medium

2021-10-10 08:19:46 字數 890 閱讀 6172

三、總結

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

示例1:

示例2:

典型的topk問題,只要將頻率hash,就變成leetcode215,難點在於如何處理hash的map結構,使其能用topk問題的演算法:

堆排序版本:

void

percdown

(vectorint,

int>>

& nums,

int p,

int size)

nums[parent]

=x;}

vector<

int>

topkfrequent

(vector<

int>

& nums,

int k)

vectorint,

int>> mid;

vector<

int> result;

for(

auto it:map) mid.

push_back

(it)

;for

(int i=k/2-

1;i>=

0;i--

)percdown

(mid,i,k)

;for

(int i=k;isize()

;i++)}

for(

int i=

0;i) result.

push_back

(mid[i]

.first)

;return result;

}

與leetcode215十分相似。

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