【剑指offer】滑动窗口的最大值

题目

给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public ArrayList<Integer> (int[] num, int size) {
ArrayList<Integer> result = new ArrayList<>();

if (num == null || num.length < 1 || size < 1)
return result;

LinkedList<Integer> deque = new LinkedList<>();

for (int i = 0; i < num.length; i++) {
while (!deque.isEmpty() && num[i] > num[deque.peekLast()])
deque.pollLast();

deque.offerLast(i);

if (i - deque.peekFirst() > size - 1)
deque.pollFirst();

if (i >= size - 1)
result.add(num[deque.peekFirst()]);
}

return result;
}