题目要求:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
思路:我们需要使用map来统计整个数组中元素出现的频率,然后再根据统计好的频率去排序,取得频率前K高的元素。我们不必使用快排实际上我们使用优先级队列即可,我们从队头处取得元素,从队尾处添加元素,我们可以用堆来实现这个队列。
堆是一棵完全二叉树,树中每个结点的值都不小于或不大于其左右孩子的值,可以分为小根堆或大根堆。
我们应该使用小根堆,因为统计最大前k个元素,对于小根堆来说每次都会把最小的元素弹出,最后堆中的元素是前k个最大元素。
leetcode实战:
代码实现: