一、题目内容
二、题解
解法1:
思路
单调栈
代码
public class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums.length == 0 || k == 0) { return new int[0]; } //单调栈 Deque<Integer> deque = new LinkedList<>(); int[] res = new int[nums.length - k + 1]; for (int j = 0, i = 1 - k; j < nums.length; i++, j++) { // 删除 deque 中对应的 nums[i-1] if (i > 0 && deque.peekFirst() == nums[i - 1]) { deque.removeFirst(); } // 保持 deque 递减 while (!deque.isEmpty() && deque.peekLast() < nums[j]) { deque.removeLast(); } deque.addLast(nums[j]); if (i >= 0) { res[i] = deque.peekFirst(); } } return res; }}
解法1:
思路
暴力
nums.length - k + 1;
i+j
代码
class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || nums.length == 0){ return new int[0]; } int[] ans = new int[nums.length - k + 1]; for(int i = 0; i< nums.length - k + 1; i++){ int currMax = Integer.MIN_VALUE; for(int j = 0; j<k;j++){ if(nums[i+j]>currMax){ currMax = nums[i+j]; } } ans[i] = currMax; } return ans; }}