java:
维持一个队列que,遍历数组,每次把que后边小于nums[i]的数字出队再加入nums[i]
当遍历的下标i达到窗口大小的时候把结果(队首加入res),接着判断目前窗口的第一个数字和队首值一不一样,一样需要出队。
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums.length < 0 || k == 0)
return new int[]{};
LinkedList<Integer> que = new LinkedList<>();
List<Integer> res = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
while (!que.isEmpty() && que.getLast() < nums[i])
que.removeLast();
que.addLast(nums[i]);
if (i >= k - 1) {
res.add(que.getFirst());
if (nums[i - k + 1] == que.getFirst())//判断需不需要出队
que.removeFirst();
}
}
int[] result = new int[res.size()];
for (int i = 0; i < res.size(); i++) {
result[i] = res.get(i);
}
return result;
}
}