package com.daily.daily20210128;
import java.util.*;
/**
* @Project: dailyCode
* @Site: http://www.zhao1iang.club/
* @Copyright: ©CodeLamp
* @Author: zhaoliang
* @Create: 2021-01-28 14:25
* @Desc: 前K个高频元素
**/
public class topKFrequent {
//给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
Queue<Integer> pg = new PriorityQueue<>(Comparator.comparingInt(map::get));
map.forEach((num,cnt)->{
if(pg.size()<k){
pg.add(num);
}else if(map.get(pg.peek())<cnt){
pg.poll();
pg.add(num);
}
});
// 构造返回结果
int[] res = new int[k];
int idx = 0;
for (int num: pg) {
res[idx++] = num;
}
return res;
}
}
09-18
342