1public int[] maxSlidingWindow(int[] nums, int k) {
2 Deque<Integer> deque = new ArrayDeque<>();
3 List<Integer> resultList = new ArrayList<>();
4
5 for (int i = 0; i < nums.length; i++) {
6 // Remove elements outside window
7 if (!deque.isEmpty() && deque.peekFirst() <= i - k) {
8 deque.pollFirst();
9 }
10
11 // Remove smaller elements from back
12 while (!deque.isEmpty() && nums[deque.peekLast()] <= nums[i]) {
13 deque.pollLast();
14 }
15
16 // Add current index
17 deque.offerLast(i);
18
19 // Add to result if window complete
20 if (i >= k - 1) {
21 resultList.add(nums[deque.peekFirst()]);
22 }
23 }
24
25 return resultList.stream().mapToInt(Integer::intValue).toArray();
26}