public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int n : nums) {
            map.put(n, map.getOrDefault(n, 0) + 1);
        }
        //  小根堆,频率最少的在最顶上
        PriorityQueue<Integer> pq = new PriorityQueue<>(k, (num1, num2) -> map.get(num1) - map.get(num2));
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (pq.size() < k) {
                pq.offer(entry.getKey());
            } else {
            // 比堆里频率最小的元素要大,把这个元素移除
                if (entry.getValue() > map.get(pq.peek())) {
                    pq.poll();
                    pq.offer(entry.getKey());
                }
            }
        }
        int[] res = new int[k];
        for (int i = k - 1; i >= 0; i--) {
            res[i] = pq.poll();
        }
        return res;
    }