首页 > 其他分享 >滑动窗口最大值

滑动窗口最大值

时间:2023-06-30 13:25:39浏览次数:57  
标签:窗口 nums 队列 最大值 back 数组 滑动

滑动窗口最大值

给你一个整数数组, 有一个大小为 \(k\) 的滑动窗口从数组的最左侧移动到数组的最右侧. 你只可以看到在滑动窗口内的 \(k\) 个数字. 滑动窗口每次只向右移动一位.


考虑使用双端队列, 队列内存储数组的下标, 保证优先队列的队头为当前滑动窗口内最大元素所在数组的位置. 因为只需要关注最大值, 所以我希望这个双端队列应该是一个单调队列, 从队尾到队首单调递增. 假设现在给定数组前四个元素为 \(5, 4, 2, 1\), 窗口为 \(4\), 所以队列内的值为 \(1 , 2 , 4 , 5\), 左边为队尾, 右边为队首. 最新元素为 \(3\), 可以发现只要 \(3\) 在队列内, 那么 \(1, 2\) 就不可能是答案, 因此可以出队.

vector<int> maxSlidingWindow(vector<int>& nums, int k) {
    int n = nums.size();
    deque<int> q;
    for (int i = 0; i < k; ++i) {
        while (!q.empty() && nums[i] >= nums[q.back()]) {
            q.pop_back();
        }
        q.push_back(i);
    }
    vector<int> ans = {nums[q.front()]};
    for (int i = k; i < nums.size(); ++i) {
        while (!q.empty() && nums[i] >= nums[q.back()]) {
            q.pop_back();
        }
        q.push_back(i);
        while (q.front() <= i - k) {
            q.pop_front();
        }
        ans.push_back(nums[q.front()]);
    }
    return ans;
}

标签:窗口,nums,队列,最大值,back,数组,滑动
From: https://www.cnblogs.com/wangyiming-rahim/p/17516450.html

相关文章

  • el-table 全选框 默认样式为文字 滑动变成单选框
    /deep/.el-table__header-wrapper.el-checkbox{width:55px;.el-checkbox__input{display:none;}&:hover{.el-checkbox__input{display:block;}&::before{displa......
  • jquery 获取父窗口的元素
    格式:$(selector,container)selector:是选择器的标志,比如id,class,名字等等container:是容器,比如window.parent.document例子:隐藏父窗口某个元素$("#login_div",window.parent.document).hide();......
  • 主窗口 模式打开窗口 UI刷新的测试
    窗体1定时器,标签,按钮。窗体1打开后,定时器自动运行,定时器每秒时间到,使得标签数值加1,点击按钮会打开窗体2。窗体2以模式方式打开,点击按钮会启动一次通讯请求。1-窗体1定时器,窗体2按钮触发同步通讯,窗体1的标签数值卡住不更新2-窗体1定时器,窗体2按钮触发异步通讯,窗体1的标签......
  • Unity3D:Hierarchy 窗口
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生Hierarchy窗口打开Unity新项目时的默认Hierarchy窗口视图Hierarchy 窗口显示场景中的每个游戏对象,如模型、摄像机或预制件。可以使用Hierarchy窗口对场景中使用的游戏对象进行排序和分组。在Scene视......
  • LeetCode —— 滑动窗口
    904. 水果成篮用一个Map记录当前窗口的情况: key-水果种类数value-这个水果种类在当前滑动窗口里出现的次数维持一个left指针到right指针的滑动窗口每次right右移一位,将新加入窗口的  fruits[right]这个种类放到map里,并将该种类计数+1如果当前窗口水果......
  • html去除页面的滑动条
    https://blog.csdn.net/WzhCsdnd/article/details/1294658271、在<body>里直接加入,可隐藏滚动条;例如:<bodyscroll="no">,隐藏滚动条;<bodyscroll="auto">宽度或高度大于页面的宽或高时,不显示滚动条,反之,则显示;<bodystyle="overflow-x:hidden">可隐藏水平滚动条;&l......
  • win32k.sys 是 Windows 操作系统中的一个系统文件,它是负责管理图形操作、窗口绘制和用
    win32k.sys是Windows操作系统中的一个系统文件,它是负责管理图形操作、窗口绘制和用户界面的部分。这个文件位于C:\Windows\System32\drivers\文件夹中。win32k.sys文件是一个核心的系统文件,它在系统启动时加载到内存中,并为应用程序提供图形和窗口管理的支持。它通过与硬件......
  • 2023-06-25 uview组件Vtabs 垂直选项卡无法滑动位移
    前言:uni项目中导入uview的vtabs插件来做分页,奈何导入demo后发现无法实现滑动页面来自动选中左侧菜单。原因:大哥!请先看文档,文档里有写,设置chain为true即可左右联动!好吧,是我没留意。解决方案:设置vtabs属性chain为true,官网示例代码:<template><viewclass="content">......
  • Win32k 是 Windows 操作系统中的一个核心组件,它负责处理图形显示、窗口管理和用户交互
    Win32k是Windows操作系统中的一个核心组件,它负责处理图形显示、窗口管理和用户交互等功能。在Windows中,Win32k.sys是一个内核模式驱动程序,它提供了访问图形子系统的接口。因此,Win32k具有较高的权限和特权。作为一个内核模式驱动程序,Win32k有比普通用户程序更高的权限级别......
  • C语言【三数中找最大值】
    原#include<stdio.h>intmain(){inta,b,c;printf("输入三个数:");scanf("%d%d%d",&a,&b,&c);if(a>b&&a>c){printf("最大值为:%d\n",a);}elseif(a>b......