package leetcode;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Set;
public class demo_347 {
public int[] topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
int[] res=new int[k];
//存储数字及其对应的个数
for (int i = 0; i < nums.length; i++) {
int num=map.getOrDefault(nums[i], 0);
map.put(nums[i], num+1);
}
//创建一个小顶堆,比较entry中value的值
Set<Map.Entry<Integer, Integer>> entries=map.entrySet();
PriorityQueue<Map.Entry<Integer, Integer>> queue=new PriorityQueue<Map.Entry<Integer, Integer>>(new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> m1,Map.Entry<Integer, Integer> m2) {
return m1.getValue()-m2.getValue();
}
});
int j=0;
for (Map.Entry<Integer, Integer> set : entries) {
if(j<k) {
//保持大小为k
queue.offer(set);
j++;
}else {
//加入小顶堆
if(set.getValue()>queue.peek().getValue()) {
queue.poll();
queue.offer(set);
}
}
}
//将栈顶元素的key放入结果集中
j=0;
while(queue.size()!=0) {
res[j]=queue.poll().getKey();
j=j+1;
}
for(int i:res) {
System.out.println(i);
}
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_347 demo=new demo_347();
int[] nums= {4,1,-1,2,-1,2,3};
demo.topKFrequent(nums, 2);
}
}