滑动窗口 双队列实现 代码注释 剑指Offer59-I. 滑动窗口的最大值

    科技2022-08-06  123

    – 剑指Offer59-I. 滑动窗口的最大值 - 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。

    来源:LeetCode

    public int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || nums.length == 0){ return new int[0]; } int[] res = new int[nums.length - k + 1]; Deque<Integer> queue = new ArrayDeque<>();//双端队列 for (int i = -k,j = 0;j < nums.length;i++,j++){//窗口滑动 if (i >= 0 && !queue.isEmpty() && nums[i] == queue.peekFirst()){//左窗口右移 queue.removeFirst(); } while(!queue.isEmpty() && nums[j] > queue.peekLast()){//把比新加入的值小的全部删除 queue.removeLast(); } queue.addLast(nums[j]);//右窗口右移 if (j - k + 1 >= 0) res[j-k+1] = queue.peekFirst();//将最大值 加入结果 } return res; }
    Processed: 0.009, SQL: 8