美文网首页
侧滑窗口最大值函数

侧滑窗口最大值函数

作者: futurehau | 来源:发表于2016-08-22 00:32 被阅读64次

题目:给你一个数组和一个窗口大小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<k)
            return new int[0];
        int len=nums.length;
        int[] res=new int[len-k+1];
        LinkedList<Integer> queue=new LinkedList<Integer>();
        int index=0;
        for(int i=0;i<len;i++){
            int cur=nums[i];
            while(!queue.isEmpty()&&nums[queue.peekLast()]<=cur){
                queue.pollLast();
            }
            queue.addLast(i);
            if(i-k==queue.peekFirst())
                queue.pollFirst();
            if(i>=k-1){
                res[index++]=nums[queue.peekFirst()];
            }
        }
        return res;
    }
}

相关文章

  • 侧滑窗口最大值函数

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

  • MUI 侧滑关闭webView相关问题

    问题1: 在使用openWindowWithTitle()方法打开新窗口后无法使用侧滑关闭此窗口 测试环境: iP...

  • 生成窗口最大值

    题目: 生成窗口最大值数组有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边, 窗口每次向右边滑一个...

  • 队列的最大值

    滑动窗口的最大值给定一个数组和滑动窗口的最大值,找出所有滑动窗口里的最大值。例如输入[2, 3, 4, 2, 6,...

  • 侧滑

  • 侧滑

  • 侧滑

    1.全屏 2.去DrawerLayout阴影 3.设置DrawerLayout主页面移动 4.Toolbar me...

  • 侧滑

    #import "LeftViewController.h" #import "UIViewController+...

  • 侧滑

  • 剑指offer | 滑动窗口的最大值

    滑动窗口的最大值 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值 示例输入:{2, 3, 4, 2, ...

网友评论

      本文标题:侧滑窗口最大值函数

      本文链接:https://www.haomeiwen.com/subject/htmwsttx.html