首先记录每个元素出现的个数
HashMapmap = new HashMap<>(); for (int num : nums) { map.put(num,map.getOrDefault(num,0)+1); }
接下来设置队列排序规律要求按照出现次数从小到大排序
PriorityQueuepriorityQueue = new PriorityQueue<>((a,b) -> map.get(a) - map.get(b));
每次循环把最小的弹出,循环结束只剩下出现次数是前k的了
for (Integer integer : map.keySet()) {
priorityQueue.offer(integer);
if (priorityQueue.size() > k){
priorityQueue.poll();
}
}
code
package leccod;
import lancup.A;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
public class P347 {
public static void main(String[] args) {
int[] res = new P347().topKFrequent(new int[]{3,2,3,1,2,4,5,5,6,7,7,8,2,3,1,1,1,10,11,5,6,2,4,7,8,5,6}, 1);
for (int re : res) {
System.out.println(re);
}
}
public int[] topKFrequent(int[] nums, int k) {
int[] res = new int[k];
//记录每个元素出现的个数
HashMap map = new HashMap<>();
for (int num : nums) {
map.put(num,map.getOrDefault(num,0)+1);
}
//设置排序规律要求按照出现次数从小到大排序
PriorityQueue priorityQueue = new PriorityQueue<>((a,b) -> map.get(a) - map.get(b));
//每次循环把最小的弹出,循环结束只剩下出现次数是前k的了
for (Integer integer : map.keySet()) {
priorityQueue.offer(integer);
if (priorityQueue.size() > k){
priorityQueue.poll();
}
}
for (int i = 0; i < k; i++) {
res[i] = priorityQueue.poll();
}
return res;
}
}



