首页 > 其他分享 >239. 滑动窗口最大值 347.前 K 个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素

时间:2023-02-04 11:36:43浏览次数:49  
标签:map nums int res 最大值 queue 347 239 new


239. 滑动窗口最大值

剑指offer题目

239. 滑动窗口最大值 347.前 K 个高频元素_小根堆

class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
LinkedList<Integer> queue = new LinkedList<>();

int[] res = new int[nums.length - k + 1];
int index = 0;
for(int i = 0;i < nums.length;i++){
while(!queue.isEmpty() && nums[queue.peekLast()] < nums[i]){
queue.removeLast();
}
queue.add(i);
if(queue.peekLast() - k == queue.peek()){
queue.poll();
}
if(i + 1 >= k){
res[index++] = nums[queue.peek()];
}
}
return res;
}
}

239. 滑动窗口最大值 347.前 K 个高频元素_小根堆_02

347.前 K 个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素_java_03


优先级队列:

其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。

优先队列默认小根堆。

class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
for(int num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
//默认小根堆
PriorityQueue<int[]> queue = new PriorityQueue<>((p1,p2) -> p2[1] - p1[1]);
Set<java.util.Map.Entry<Integer,Integer>> entries = map.entrySet();
for(java.util.Map.Entry<Integer,Integer> entry:entries){
int[] res = new int[2];
res[0] = entry.getKey();
res[1] = entry.getValue();
queue.offer(res);
}
int[] result = new int[k];
for(int i = 0;i < k;i++){
int[] temp = queue.poll();
result[i] = temp[0];
}
return result;
}
}

239. 滑动窗口最大值 347.前 K 个高频元素_数据结构_04


标签:map,nums,int,res,最大值,queue,347,239,new
From: https://blog.51cto.com/u_15911055/6036994

相关文章