–
剑指Offer59-I. 滑动窗口的最大值
-
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
来源:LeetCode
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums == null || nums.length == 0){
return new int[0];
}
int[] res = new int[nums.length - k + 1];
Deque<Integer> queue = new ArrayDeque<>();//双端队列
for (int i = -k,j = 0;j < nums.length;i++,j++){//窗口滑动
if (i >= 0 && !queue.isEmpty() && nums[i] == queue.peekFirst()){//左窗口右移
queue.removeFirst();
}
while(!queue.isEmpty() && nums[j] > queue.peekLast()){//把比新加入的值小的全部删除
queue.removeLast();
}
queue.addLast(nums[j]);//右窗口右移
if (j - k + 1 >= 0)
res[j-k+1] = queue.peekFirst();//将最大值 加入结果
}
return res;
}