- 队列中的元素始终保持有序,解决有这种需要的算法问题(提高时间复杂度)
239. 滑动窗口最大值
- 为了节省时间复杂度,避免使用暴力遍历,因此考虑使用一种保持有序的队列,同时根据窗口值舍弃元素添加元素
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int len=nums.length;
if(len<2) return nums;
int[] ans=new int[len-k+1];
LinkedList<Integer> queue=new LinkedList<>();
for(int i=0;i<len;i++){
//保证有序
while(!queue.isEmpty() && nums[queue.peekLast()]<nums[i]){
queue.pollLast();
}
queue.offer(i);
//队头最大元素是否在窗口内,不在的话舍去
if(queue.peek()<=i-k){
queue.poll();
}
//是否第一个窗口已经遍历完成
if(i+1>=k){
ans[i+1-k]=nums[queue.peek()];
}
}
return ans;
}
}