239.滑动窗口最大值
fail
java里面用 linkedlist 表示队列:
boolean add(E)/boolean offer(E) 添加元素到队尾
E remove()/E poll() 获取队首元素并从队列中删除
E element()/E peek() 获取队首元素但并不从队列中删除
347.前 K 个高频元素
fail
注意优先队列怎样定义使用的
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int k = sc.nextInt();
String[] sp = s.split(",");
List<Integer> res = new ArrayList<>();
Map<Integer, Integer> map = new HashMap<>();
for (String s1 : sp){
int i = Integer.parseInt(s1);
map.put(Integer.parseInt(s1), map.getOrDefault(i, 0) + 1);
}
/*Comparator接口说明:
* 返回负数,形参中第一个参数排在前面;返回正数,形参中第二个参数排在前面
* 对于队列:排在前面意味着往队头靠
* 对于堆(使用PriorityQueue实现):从队头到队尾按从小到大排就是最小堆(小顶堆),
* 从队头到队尾按从大到小排就是最大堆(大顶堆)--->队头元素相当于堆的根节点
* */
PriorityQueue<int[]> queue = new PriorityQueue<>((pair1, pair2) -> pair2[1] - pair1[1]);
for (var entry : map.entrySet()){ //var entry 的使用 替代 Map.Entry<Integer, Integer> entry
queue.add(new int[]{entry.getKey(), entry.getValue()});
}
for (int i = 0; i < k; i++ ){
res.add(queue.poll()[0]);
}
System.out.println(res);
}
}