侧滑窗口最大值函数

题目:给你一个数组和一个窗口大小k,要求窗口从数组开始滑动,求解各个窗口的最大值

[leetcode239]https://leetcode.com/problems/sliding-window-maximum/

算法步骤

  1. 使用一个双端队列,遍历数组,如果遇到的数比大于等于队列末尾的数,那么就弹出队列中的数,知道队列末尾大于当前数或者队列为空,然后把当前数加到队列中去。
  2. 检查队列开始的数是否有效,如果无效则应该弹出队列开头的数。
  3. 从i大于等于窗口时,队列首部就是以当前数为最右侧的窗口的最大值。

算法原理

由上述可知,队列头始终存储最大的数,但是小一些的那些书也不能丢弃,是因为如果队列头无效了,那么小一些的数就派上用场了。
等于时也有弹出是因为前边的数一定比后边的数先无效。

代码:

public class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums==null||k<1||nums.length queue=new LinkedList();
        int index=0;
        for(int i=0;i=k-1){
                res[index++]=nums[queue.peekFirst()];
            }
        }
        return res;
    }
}

你可能感兴趣的:(侧滑窗口最大值函数)