给你一个整数数组 nums
,有一个大小为 k
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k
个数字。滑动窗口每次只向右移动一位。
返回 滑动窗口中的最大值 。
import java.util.Deque;
import java.util.LinkedList;
public class title239 {
public static void main(String[] args) {
int[] nums={1,3,-1,-3,5,3,6,7};
int k=3;
int[] result=maxSlidingWindow(nums,k);
for (int i=0;i<result.length;i++){
//System.out.print(result[i]+" ");
}
}
public static int[] maxSlidingWindow(int[] nums, int k) {
int len=nums.length;
int[] result=new int[len-k+1];
//1.定义一个队列,存储可能为最大窗口值的下标
//队列中,队首元素一定为最大的
Deque<Integer> deque = new LinkedList<Integer>();
//保证每次放进去的数字要比队尾的大,否则弹出
for (int i = 0; i < k; i++) {
while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
deque.pollLast();
}
deque.offerLast(i);
}
result[0]=nums[deque.peekFirst()];
for (int i = k; i < len; ++i) {
while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
deque.pollLast();
}
deque.offerLast(i);
while (deque.peekFirst() <= i - k) {
deque.pollFirst();
}
result[i - k + 1] = nums[deque.peekFirst()];
}
return result;
}
}