leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)

x33g5p2x  于2021-11-12 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(431)

题目

https://leetcode.com/problems/sliding-window-maximum/

题解

窗口内最大最小值更新结构,单调栈问题,左神视频讲过,《程序员算法面试指南》也有此题目。

本题的关键在于利用双端队列来实现窗口最大值的更新。

  1. class Solution {
  2. public int[] maxSlidingWindow(int[] nums, int k) {
  3. Deque<Integer> valueQueue = new LinkedList<>();
  4. Deque<Integer> indexQueue = new LinkedList<>();
  5. int[] result = new int[nums.length - k + 1];
  6. for (int i = 0; i < nums.length; i++) {
  7. if (!indexQueue.isEmpty() && indexQueue.peekFirst() <= i - k) {
  8. valueQueue.pollFirst();
  9. indexQueue.pollFirst();
  10. }
  11. while (!valueQueue.isEmpty() && valueQueue.peekLast() < nums[i]) {
  12. valueQueue.pollLast();
  13. indexQueue.pollLast();
  14. }
  15. valueQueue.offer(nums[i]);
  16. indexQueue.offer(i);
  17. if (i - k + 1 >= 0) result[i - k + 1] = valueQueue.peekFirst();
  18. }
  19. return result;
  20. }
  21. }

相关文章