public static int[] maxSlidingWindow(int[] nums, int k) {
if (nums == null || k <= 0 || k > nums.length) {
return new int[0];
}
int length = nums.length;
int[] res = new int[length - k + 1];
Deque<Integer> queue = new LinkedList<>();
for (int i = 0; i < k; i++) {
if (queue.isEmpty()) {
queue.add(0);
} else {
while (!queue.isEmpty() && nums[queue.getLast()] <= nums[i]) {
queue.pollLast();
}
queue.addLast(i);
}
}
res[0] = nums[queue.getFirst()];
int resIndex = 0;
for (int i = k; i < nums.length; i++) {
if (queue.getFirst() == i - k && !queue.isEmpty()) {
queue.pollFirst();
}
while (!queue.isEmpty() && nums[queue.getLast()] <= nums[i]) {
queue.pollLast();
}
queue.addLast(i);
res[++resIndex] = nums[queue.getFirst()];
}
return res;
}