题目如下:
分析:利用单调队列,保持按照从大到小的顺序存放,同时为了保持滑动窗口的长度,所以队列中保存的是数据的下标。
代码如下:
int len = nums.length;
List<Integer> list = new ArrayList<>(); //存放结果
LinkedList<Integer> queue = new LinkedList<>();
int left=0,right=0;
while(right<len){
//进行迭代操作
if(right-left < k){
while (!queue.isEmpty() && queue.getFirst()<left){
queue.removeFirst();
}
// 窗口数量还没到
while (!queue.isEmpty() && nums[right]>nums[queue.getLast()]){
queue.removeLast();
}
queue.add(right);
right++;
}else{
list.add(queue.getFirst());
left++;
}
}
list.add(queue.getFirst());
int[] res = new int[list.size()];
for(int i=0;i<list.size();i++){
res[i] = nums[list.get(i).intValue()];
System.out.println(res[i]);
}