一、题目内容

image.png

二、题解

解法1:

思路

单调栈

代码

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

解法1:

思路

暴力
nums.length - k + 1;
i+j

代码

  1. class Solution {
  2. public int[] maxSlidingWindow(int[] nums, int k) {
  3. if(nums == null || nums.length == 0){
  4. return new int[0];
  5. }
  6. int[] ans = new int[nums.length - k + 1];
  7. for(int i = 0; i< nums.length - k + 1; i++){
  8. int currMax = Integer.MIN_VALUE;
  9. for(int j = 0; j<k;j++){
  10. if(nums[i+j]>currMax){
  11. currMax = nums[i+j];
  12. }
  13. }
  14. ans[i] = currMax;
  15. }
  16. return ans;
  17. }
  18. }