-
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表