mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Update 347. Top K Frequent Elements.md
This commit is contained in:
parent
1c3d9b07bf
commit
2adb057f3f
@ -11,10 +11,10 @@
|
||||
* 若新来的频次比堆顶大,说明堆顶的频次应该被淘汰,并将新来的频次push进堆;
|
||||
* 否则说明新来的频次不够大,那跳过即可。
|
||||
|
||||
注意堆的size始终是k,所以每次从堆顶删除元素和插入元素复杂度都是O(k),有大约n次操作,所以复杂度为O(nlogk)。
|
||||
注意堆的size始终是k,初始建堆复杂度O(k),每次从堆顶删除元素和插入元素复杂度都是O(k),有大约n次操作,所以时间复杂度为O(nlogk);空间复杂度O(k)。
|
||||
|
||||
几个注意点:
|
||||
* 不能用最大堆!!! 用最大堆要先把所有元素都加入堆,堆大小就为n,再不断pop出k个元素,虽然结果是对的,但是由于堆大小为n级别,所以建堆的n次插入复杂度为O(nlogn)。
|
||||
* 也可以用最大堆,但是需要注意的是用最大堆要先把所有元素都加入堆,堆大小就为n,再不断pop出k个元素。由于堆大小为n级别,所以建堆复杂度为O(n),总的时间复杂度为O(n + klogn);空间复杂度O(n)。**当n很大时用最大堆是不好的,将耗费大量空间。**
|
||||
* STL中堆用`priority_queue`实现,不过默认是最大堆,这里我们需要最小堆,需要传入`greater`类(而不是函数)。
|
||||
* 代码实现中堆的元素是一个pair, 由于pair排序默认对first排序,所以first我们定义成频次,second定义成元素值。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user