前情回顾:
leetcode
遇见了PriorityQueue
的比较器,好久没写有些忘了,复习一下。
主要涉及的代码:
class Solution {
public int[] topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<Integer,Integer>();
for(Integer i:nums){
map.put(i, map.getOrDefault(i,0)+1);
}
Queue<Integer> pq = new PriorityQueue(new Comparator<Integer>(){
@Override
public int compare(Integer e1,Integer e2){
return map.get(e2)-map.get(e1);
}
});
for(Integer key:map.keySet()){
pq.add(key);
}
int[] res = new int[k];
for(int i=0;i<k;++i){
res[i] = pq.remove();
}
return res;
}
}
改为lambda
表达式:
PriorityQueue<Integer> pq = new PriorityQueue((e1, e2) -> map.get(e2) - map.get(e1));
这代码,优雅,实在是太优雅了!
比较器的升降序:
//升序
return e1-e2;
与
//降序
return e2-e1;
规则是return
的<0
就顺序不变,>0
就交换。
所以,怎么判断就很一目了然了。
ps:还是放一张图片比较简单:)