数组中第k个最大元素
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> q = new PriorityQueue<Integer>(k, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
k--;
for (int num : nums) {
q.add(num);
}
while (k-- > 0) {
q.poll();
}
return q.peek();
}
}
前k个高频元素
class Solution {
public int[] topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
if (map.containsKey(num)) {
map.merge(num, 1, Integer::sum);
}else {
map.put(num, 1);
}
}
PriorityQueue<Integer> q =new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return map.get(o2) - map.get(o1);
}
});
for (Integer key : map.keySet()) {
q.offer(key);
}
int[] res = new int[k];
int i = 0;
while (k-- > 0) {
res[i++] = q.poll();
}
return res;
}
}