> 文章列表 > 滑动窗口算法

滑动窗口算法

滑动窗口算法

class Solution {
    public static int[] maxSlidingWindow(int[] nums, int k) {
        int right =0;
        int[] res = new int[nums.length -k +1];
        int index=0;
        LinkedList<Integer> list = new LinkedList<>();
// 开始构造窗口
        while (right < nums.length) {
// 这里的list的首位必须是窗口中最大的那位
            while (!list.isEmpty() && nums[right] > list.peekLast()) {
                list.removeLast();
            }
// 不断添加
            list.addLast(nums[right]);
            right++;
// 构造窗口完成,这时候需要根据条件做一些操作
            if (right >= k){
                res[index++]=list.peekFirst();
// 如果发现第一个已经在窗口外面了,就移除
                if(list.peekFirst() == nums[right-k]) {
                    list.removeFirst();
                }
            }
        }
        return res;
    }