class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(k==0){
return new int[0];
}
int n = nums.length;
Deque<Integer> deque = new LinkedList<Integer>();
for (int i = 0; i < k; ++i) {
while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
deque.pollLast();
}
deque.offerLast(i);
}
int[] ans = new int[n - k + 1];
ans[0] = nums[deque.peekFirst()];
for (int i = k; i < n; ++i) {
while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
deque.pollLast();
}
deque.offerLast(i);
while (deque.peekFirst() <= i - k) {
deque.pollFirst();
}
ans[i - k + 1] = nums[deque.peekFirst()];
}
return ans;
}
}
2021-10-05(剑指 Offer 59 - I. 滑动窗口的最大值)
最新推荐文章于 2025-11-05 14:14:15 发布
本文介绍了如何使用Java实现滑动窗口算法,解决最大子数组问题,通过deque数据结构动态维护窗口范围,适用于求解数组中每k个连续元素的最大值。
1222

被折叠的 条评论
为什么被折叠?



