index
title: 滑动窗口的最大值 date: 2019-08-21T11:00:41+08:00 draft: false categories: offer
题目
解题思路
public ArrayList<Integer> maxInWindows(int[] num, int size) {
ArrayList<Integer> res = new ArrayList<>();
if (size == 0) return res;
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 0; i < num.length; i++) {
while (queue.peekFirst() != null && i - queue.peekFirst() >= size) {
queue.removeFirst();
}
while (queue.peekLast() != null && i - queue.peekLast() >= size) {
queue.removeLast();
}
if (queue.isEmpty()) {
queue.addFirst(i);
} else {
if (num[i] > num[queue.peekFirst()]) {
queue.clear();
queue.addFirst(i);
} else {
while (num[i] > num[queue.peekLast()]) {
queue.removeLast();
}
queue.addLast(i);
}
}
if (i >= size - 1) res.add(num[queue.peekFirst()]);
}
return res;
}Last updated