一、题目内容

image.png

二、题解

解法1:

思路

单调栈

代码

  1. public class Solution {
  2. public ArrayList<Integer> maxInWindows(int [] num, int size) {
  3. ArrayList<Integer> ans = new ArrayList<Integer>();
  4. if (num.length == 0 || size == 0) {
  5. return ans;
  6. }
  7. //单调栈
  8. Deque<Integer> deque = new LinkedList<>();
  9. int left,right;
  10. for (left = 1-size, right = 0; right < num.length; left++,right++) {
  11. // 删除 deque 中对应的 nums[left-1]
  12. if(left>0 && deque.peekFirst() == num[left-1]){
  13. deque.removeFirst();
  14. }
  15. // 保持 deque 递减
  16. while(!deque.isEmpty() && deque.peekLast()<num[right]){
  17. deque.removeLast();
  18. }
  19. deque.add(num[right]);
  20. if(left>=0){
  21. ans.add(deque.peekFirst());
  22. }
  23. }
  24. return ans;
  25. }
  26. }