import java.util.LinkedList;
import java.util.List;
import java.util.TreeMap;
class Solution {
private class Freq implements Comparable<Freq> {
int num;// 数的值
int freq;// 数的次数
public Freq(int num, int freq) {
this.num = num;
this.freq = freq;
}
@Override
public int compareTo(Freq other) {
// TODO Auto-generated method stub
//始种保持堆顶出现的次数最少,最小堆。
if(this.freq>other.freq) {//换
return 1;//
}else if(this.freq<other.freq) {//不换
return -11;//
}else {//不换
return 0;
}
}
}
public List<Integer> topKFrequent(int[] nums, int k) {
//得到所有数字的频次
TreeMap<Integer, Integer> map = new TreeMap<>();
for (int i : nums) {
if(map.containsKey(i)) {
map.put(i,map.get(i)+1);
}else {
map.put(i, 1);
}
}
//入队操作
PriorityQueue<Freq> pq = new PriorityQueue<>();
for (int key : map.keySet()) {
if(pq.size()<k) {
pq.add(new Freq(key, map.get(key)));
}else if(map.get(key)>pq.peek().freq) {
pq.remove();
pq.add(new Freq(key,map.get(key)));
}
}
LinkedList<Integer> list = new LinkedList<>();
while(!pq.isEmpty()) {
list.add(pq.remove().num);
}
return list;
}
}
leetcode:347. 前 K 个高频元素
最新推荐文章于 2023-06-08 13:56:47 发布