Update 347. Top K Frequent Elements.md

This commit is contained in:
ShusenTang
2019-12-11 20:24:14 +08:00
committed by GitHub
parent 1c3d9b07bf
commit 2adb057f3f
+2 -2
View File
@@ -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定义成元素值。