239.滑动窗口最大值
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
LinkedList<Integer> linkedList = new LinkedList<>();
int[] res = new int[nums.length - k + 1];
int cur = 0;
for (int i = 0; i < nums.length; i++) {
if (!linkedList.isEmpty() && i - k == linkedList.peek()) {
linkedList.poll();
}
if (linkedList.isEmpty()) {
linkedList.add(i);
} else {
Integer tail = linkedList.peekLast();
if (nums[i] >= nums[tail]) {
while (!linkedList.isEmpty() && nums[i] >= nums[tail]) {
linkedList.pollLast();
tail = linkedList.peekLast();
}
linkedList.add(i);
} else {
linkedList.add(i);
}
}
if (i >= k - 1) {
res[cur++] = nums[linkedList.peek()];
}
}
return res;
}
}
347.前 K 个高频元素
class Solution {
public int[] topKFrequent(int[] nums, int k) {
PriorityQueue<Integer[]> pq = new PriorityQueue<>(
new Comparator<Integer[]>() {
@Override
public int compare(Integer[] o1, Integer[] o2) {
return o2[1] - o1[1];
}
}
);
Map<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
hashMap.put(nums[i], hashMap.getOrDefault(nums[i], 0) + 1);
}
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
for (Map.Entry<Integer, Integer> entry : entries) {
Integer key = entry.getKey();
Integer value = entry.getValue();
pq.offer(new Integer[]{key, value});
}
int[] res = new int[k];
for (int i = 0; i < k; i++) {
Integer[] poll = pq.poll();
res[i] = poll[0];
}
return res;
}
}