public int[] maxSlidingWindow(int[] nums, int k) {
if (nums.length == 0) return new int[0];
int n = nums.length;
int[] res = new int[n-k+1];
Deque<Integer> deque = new ArrayDeque<>();
// deque里从前到后是 从大到小的
for (int i = 0; i < k; i++) {
while (!deque.isEmpty() && deque.peekLast() < nums[i]) {
deque.removeLast();
}
deque.addLast(nums[i]);
}
res[0] = deque.peekFirst();
for (int i = k; i < n; i++) {
if (deque.peekFirst() == nums[i-k]) {
deque.removeFirst();
}
while (!deque.isEmpty() && deque.peekLast() < nums[i]) {
deque.removeLast();
}
deque.addLast(nums[i]);
res[i-k+1] = deque.peekFirst();
}
return res;
}
剑指 Offer 59 - I. 滑动窗口的最大值
最新推荐文章于 2022-01-29 15:25:01 发布