• 3.17

  • 用 map 构建映射

  • 自定义排序规则

  • map 的遍历(第一个是大写,第二个是小写的方法 entrySet()

  • 剩下的都会

  • 2.15

    • 记录频次到 map
    • 根据二维数组的第 1 个位置排序(也就是 map。key)
    • 随后遍历 map,变为二维数组存入 heap
  • 2.3

    • 难点 1;初始小根堆时手写 comparator 规则(以元组的第二个为排序规则)
    • 难点 2:map 的遍历
    • 难点 3:map 的频率添加时用的是 getOrDefault
    • 思路和 1._数组中的第k个最大元素一致
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
 
        PriorityQueue<int[]> heap = new PriorityQueue<>(
            (a,b)->(a[1]-b[1])
        );
        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            heap.offer(new int[]{entry.getKey(),entry.getValue()});
            if(heap.size()>k){
                heap.poll();
            }
        }
        int[] res = new int[k];
        for(int i=0;i<k;i++){
            res[i] = heap.poll()[0];
        }
        return res;
    }
}
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        // 1️⃣ 统计每个数字出现的次数
        Map<Integer,Integer> freq = new HashMap<>();
        for(int num:nums){
            freq.put(num,freq.getOrDefault(num,0)+1);
        }
        // 2️⃣ 小根堆,按频率排序
        PriorityQueue<int[]> heap = new PriorityQueue<>(
            (a,b) -> a[1]-b[1] // 按出现次数升序
        );
 
        for(Map.Entry<Integer,Integer> entry : freq.entrySet()){
            heap.offer(new int[]{entry.getKey(),entry.getValue()});
            if(heap.size()>k){
                heap.poll();
            }
        }
 
        int[] res = new int[k];
        for(int i=k-1;i>=0;i--){
            res[i] = heap.poll()[0];
        }
        return res;
    }
}

-先判断是否存在target-num[i],再放进去hash表