滑动窗口的最大值>>>
滑动窗口
:使用一个队列(队列中存放的是数组中元素的索引值
),确保队首元素是滑动窗口内的最大值,如何保证,每添加一个元素要判断,这个元素是否大于队列中现有元素,若大于则不断移除队列中的元素,再判断队列中的元素是否不再此时滑动窗口范围内
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || nums.length < 2) return nums;
LinkedList<Integer> queue = new LinkedList();
int[] result = new int[nums.length-k+1];
for(int i = 0;i < nums.length;i++){
while(!queue.isEmpty() && nums[queue.peekLast()] <= nums[i]){
queue.pollLast();
}
queue.addLast(i);
if(queue.peek() <= i-k){
queue.poll();
}
if(i+1 >= k){
result[i+1-k] = nums[queue.peek()];
}
}
return result;
}
}