package heap; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; /** * 题目: 347. 前 K 个高频元素 (topKFrequent) * 描述:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 * 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] * 链接:https://leetcode.cn/problems/top-k-frequent-elements/ */ // 二刷不会 public class TopKFrequent { public int[] topKFrequent(int[] nums, int k) { HashMap map=new HashMap<>(); int cnt=0; PriorityQueue minHeap=new PriorityQueue<>( //小根堆 (a,b) -> a[1]-b[1] ); int[] temp; int[] res=new int[k]; for (int i = 0; i < nums.length; i++) { int cur=nums[i]; map.put(cur, map.getOrDefault(cur,0)+1); } for (Map.Entry entry : map.entrySet()) { if(cnttemp[1]) { minHeap.poll(); minHeap.add(new int[]{entry.getKey(),entry.getValue()}); } } } cnt=0; for (int[] ints : minHeap) { res[cnt++]=ints[0]; } return res; } public int[] topKFrequent2(int[] nums, int k) { HashMapmap=new HashMap<>(); PriorityQueue maxHeap = new PriorityQueue<>( //大根堆 (a, b) -> b[1] - a[1]); int[] res=new int[k]; int i=0; for (int num : nums) { if(!map.containsKey(num)) map.put(num,1); else map.put(num,map.get(num)+1); } for (Map.Entry entry : map.entrySet()) { maxHeap.add(new int[]{entry.getKey(),entry.getValue()}); } while (!maxHeap.isEmpty()) { if(i