LeetCode刷题笔记day15- 347. 前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
链接:https://leetcode-cn.com/problems/top-k-frequent-elements
解决方案:①:利用map的key的唯一性,记录每个数字出现的次数
②、利用优先队列,通过map中出现次数的多少为比较标准构造数字个数为k的小顶堆
③、输出优先队列中的数字

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
       HashMap<Integer,Integer> map = new HashMap<>();
       for(int num:nums){
           map.put(num,map.getOrDefault(num,0)+1);
       }
       //排列顺序为从小到大
       PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>()
           {
           public int compare(Integer num1,Integer num2){
               return map.get(num1) -map.get(num2);
           }
       });
       for(int key:map.keySet())
       {
           if(pq.size()<k){
               pq.add(key);
           }
           else if(map.get(key)>map.get(pq.peek())){
               pq.remove();
               pq.add(key);
           }
       }
       int[]res = new int[k];
       int index = 0;
       while(!pq.isEmpty()){
           res[index++] = pq.remove();
          
       }
       return res;
         
    }
}

你可能感兴趣的:(LeetCode刷题笔记,leetcode,算法)