给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
java中实现大顶堆和小顶堆的数据结构---------优先级队列PriorityQueue
- class Solution {
- public int[] topKFrequent(int[] nums, int k) {
-
- hashmap统计频率
- HashMap
hashMap = new HashMap<>(); - for (int e :
- nums) {
- hashMap.merge(e, 1, Integer::sum);
- }
-
- 将每一个key-value,作为集合的元素
- Set
> entries = hashMap.entrySet(); -
- 新建一个优先级队列,o1-o2用小顶堆实现;o2-o1用大顶堆实现
-
- PriorityQueue
> priorityQueue = new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue()); -
- for (Map.Entry
e: - entries) {
- priorityQueue.offer(e);
- }
- int[] res = new int[k];
- for (int i = 0; i < k; i++) {
- res[i] = Objects.requireNonNull(priorityQueue.poll()).getKey();
- }
-
- return res;
- }
- }