https://leetcode.com/problems/sliding-window-maximum/
窗口内最大最小值更新结构,单调栈问题,左神视频讲过,《程序员算法面试指南》也有此题目。
本题的关键在于利用双端队列来实现窗口最大值的更新。
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Deque<Integer> valueQueue = new LinkedList<>();
Deque<Integer> indexQueue = new LinkedList<>();
int[] result = new int[nums.length - k + 1];
for (int i = 0; i < nums.length; i++) {
if (!indexQueue.isEmpty() && indexQueue.peekFirst() <= i - k) {
valueQueue.pollFirst();
indexQueue.pollFirst();
}
while (!valueQueue.isEmpty() && valueQueue.peekLast() < nums[i]) {
valueQueue.pollLast();
indexQueue.pollLast();
}
valueQueue.offer(nums[i]);
indexQueue.offer(i);
if (i - k + 1 >= 0) result[i - k + 1] = valueQueue.peekFirst();
}
return result;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/sinat_42483341/article/details/121142040
内容来源于网络,如有侵权,请联系作者删除!