这样解法可以,但是会存在一个问题:排序了很多不需要去排序的数据,时间复杂度过高.假设有数据100万,对这个集合进行排序需要很长的时间,即便使用快速排序,时间复杂度也是O(nlogn),那么这个问题如何解决呢...解决方法就是以空间换时间,使用优先级队列
一:认识PriorityQueue
1.1:PriorityQueue位于java.util包下,继承自Collection,因此它具有集合的属性,并且继承自...假设有3、7、8三个数,需要存储在优先级队列里,画个图大家理解下:
image.png
可以看出小顶堆的头顶元素存储着整个数据集合中数字最小的元素,而大顶堆存储着整个数据集合中数字最大的元素,也就是一个按照升序排列...当 k > 1 就需要一个能够根据出现频率快速获取元素的数据结构,这里就需要用到优先队列
首先建立一个元素值对应出现频率的哈希表,使用 HashMap来统计,然后构建优先级队列,这里依旧是构建小顶堆,不过因为该题是计算元素出现的频率...三:总结
在实际中遇见的TOP-K问题有哪些,以及优先级队列PriorityQueue的基本原理介绍,接着由易到难的讲解了如何通过优先级队列PriorityQueue来解决TOP-k问题,这两个问题都比较经典