LeetCode 239. Sliding Window Maximum

深入了解BPM及BPM业务流程管理系统 BPM 即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续地提高组织业务绩效为目的的系统化方法。它涵盖了业务流程的整个生命周期,包括流程的设计、执行、监控、分析和优化。BPM 作为一种先进的管理方法,对于企业提高运营效率、降低成本、提升客户满意度和增强竞争力具有重要意义。BPM 流程管理系统为企业实现 BPM 提供了强大的工具和支持,而 F2BPM 流程管理平台以其先进的技术架构、丰富的功能模块、简单易用的操作界面和强大的定制能力,成为企业实现业务流程管理的理想选择。 阅读详情

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see thek numbers in the window. Each time the sliding window moves right by one position.

For example,
Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

Window position                Max
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7

Therefore, return the max sliding window as [3,3,5,5,6,7].



#include <iostream>
#include <vector>
#include <queue>
using namespace std;

CORRECT
// first, we can slove it using priority_queue.
<strong>// time complexity: O(nklogk)</strong>
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
    int n = nums.size();
    vector<int> res;
    k = k % n;
    priority_queue< int, vector<int>, less<int> > maxHeap;
    for(int i = 0; i <= n - k; ++i) {
        for(int j = i; j < i + k; ++j) {
            maxHeap.push(nums[j]);
        }
        res.push_back(maxHeap.top());
        maxHeap = priority_queue <int>();
    }
    return res;
}

WRONG!! I was thinking to use a queue. but it failed on this test case :[1,3,1,2,0,5]  ---> it should output:[3,3,2,5]. but the following code output: [3,3,1,5]

No Idea till now how to make it work.

// we can use a queue to always keep the current max number at the front.
vector<int> maxSlidingWindowII(vector<int>& nums, int k) {
    queue<int> maxValues;
    vector<int> res;
    for(int i = 0; i < k; ++i) {
        if(maxValues.empty()) {
            maxValues.push(i);
        } else {
            while(!maxValues.empty()) {
                if(nums[i] > nums[maxValues.front()]) {
                    maxValues.pop();
                    continue;
                } else break;
            }
            maxValues.push(i);
        }
    }
    res.push_back(nums[maxValues.front()]);
    for(int i = k; i < nums.size(); ++i) {
        if(maxValues.empty()) {
            maxValues.push(i);
        } else {
            while(!maxValues.empty() && ((i - maxValues.front()) >= k)) maxValues.pop();
             while(!maxValues.empty()) {
                if(nums[i] > nums[maxValues.front()]) {
                    maxValues.pop();
                } else break;
            }
            maxValues.push(i);
        }
        res.push_back(nums[maxValues.front()]);
    }
    return res;
}


CORRECT!  using a fixed size queue and a deque.....

vector<int> maxSlidingWindowIII(vector<int>& nums, int k) {
    if(nums.size() == 0) return {};
    queue<int> window;
    deque<int> maxes;
    vector<int> maxValue;
    for(int i = 0; i < nums.size(); ++i) {
        window.push(nums[i]);
        while(!maxes.empty() && (nums[i] > maxes.back())) {
            maxes.pop_back();
        }
        maxes.push_back(nums[i]);
        if(window.size() == k) {
            maxValue.push_back(maxes.front());
            int tmp = window.front();
            window.pop();
            if(tmp == maxes.front()) {
                maxes.pop_front();
            }
        }
    }
    return maxValue;
}

int main(void) {
    vector<int> nums{1, 3, 1, 2, 0, 5};
    vector<int> res = maxSlidingWindowIII(nums, 3);
    for(int i = 0; i  < res.size(); ++i) {
        cout << res[i] << endl;
    }
}

A fantastic way!!!!

// this is a very fantastic way to solve it!~

/* 
   given [1, 2, -1, -3, 4, 2, 5, 3], window = 4
   minValue [-1, -3, -3, -3, 2, 2]
   maxValue [ 2,  2,  4,  4, 5, 5]
*/

/*
  cut the array in nums.size() / M segment. For each segment, we traverse from the left, right to get the minValue.
  [1, 2, -1,  -3, 4, 2,    5, 3]

  leftMin:
  [1,  1, -1,   -3, -3, -3,  5, 3]

  rightMin:
  [-1, -1, -1,  -3,  2,  2,  3, 3]
  
  The final min:
  [-1, -3, -3, -3, 2, 2]


  leftMax:
  [1, 2, 2,  -3, 4, 4,   5, 5]

  rightMax:
  [2, 2, -1,  4, 4, 2,   5, 3]

  The final max:
  [2, 2, 4, 4, 5, 5]
*/

vector<int> getMinWindow(vector<int>& nums, int window) {
  int n = nums.size();
  vector<int> leftMin(nums.size(), 0);
  vector<int> rightMin(nums.size(), 0);

  leftMin[0] = nums[0];
  rightMin[n - 1] = nums[n - 1];

  for(int i = 0; i < n; ++i) {
    leftMin[i] = (i % window == 0) : nums[i] : min(leftMin[i-1], nums[i]);

    int j = n - i - 1;
    rightMin[j] = (j % window == 0) : nums[j] : min(rightMin[j + 1], nums[j]);
  }
  vector<int> sliding_window(n - window + 1, 0);
  for(int i = 0, j = 0; i + window < n; ++i) {
    sliding_window[j++] = min(rightMin[i], leftMin[i + w - 1]);
  }
  return sliding_window;
}

图解电动汽车:电动汽车主要参数 动力性指标 汽车的动力性指标主要有最高车速、加速时间、最大爬坡等,体现了汽车在行驶过程中能达到的极限运动水平。对于电动汽车,其动力性由搭载的驱动电动机决定,主要的参数包括最大扭矩、额定功率、最大功率、最大转速等。 功率是指物体在单位时间内所做的功的多少,是描述做功快慢的物理量,单位是 kW。 扭矩是指机械元件转动的力矩,也称转矩,表示转动力量的大小,单位是 N·m。 转速是指发动机/电动机的转速,的单位是 rpm,即转每分钟。额定转速是指在额定功率下电动机的转速,最大转速则是在最大功率下电动机的转速。 阅读详情

相关推荐

从传统扫描到SSN:Tessent数据包技术如何减少90%测试时间

本文深入探讨了Tessent流式扫描网络(SSN)如何通过其核心的数据包技术,彻底改变芯片测试范式。该技术将测试数据封装成标准化数据包,在共享总线上进行智能路由与分发,实现了动态带宽分配与核心独立测试,从而将复杂SoC(如AI芯片)的总体测试时间大幅削减90%,并显著提升测试灵活性与可扩展性。

meat5的博客 490

[LeetCode] Sliding Window Maximum 滑动窗口最大值

class Solution { public: vector&lt;int&gt; maxSlidingWindow(vector&lt;int&gt;&amp; nums, int k) { vector&lt;int&gt; res; deque&lt;int&gt; q; for (int i = 0; i &lt; nums.si...

jwy2014的专栏 178

EB配置输入捕获ICU模块----基于S32K3

基于S32K311芯片,EB配置ICU输入捕获(Emios 和Siul)

weixin_43586400的博客 1772

滑动窗口之滑动窗口最大值

思路分析: 力扣https://leetcode-cn.com/problems/sliding-window-maximum/ 首先相同题目的比较,字符串和子字符串的相关题目是需要自己利用left、right指针来表示一个自适应的窗口,但是滑动窗口的最大值是不需要设置left、right指针的,直接设置了窗口的大小。所以在代码实现中直接利用if 先把窗口大小k-1进行 赋值,然后else进入窗口的滑动; 实现单调队列实现在窗口内以O(1)的复杂度获取窗口中的队列 「单调队列」数据结构解决滑动窗口.

weixin_38216573的博客 1002

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

ROS水下仿真神器uuv_simulator:从零搭建水下机器人测试环境(附Gazebo配置全流程)

本文详细介绍了如何使用ROS和uuv_simulator从零搭建水下机器人仿真测试环境,包括Gazebo配置全流程。通过系统环境准备、水下世界构建、机器人模型定制开发等步骤,帮助开发者在虚拟海洋环境中高效验证算法,大幅降低研发成本。特别适合水下机器人研发人员参考。

ujm5678901的博客 261

Leetcode|Sliding Window Maximum(multiset,优先队列,双端队列和区间树的应用)

Given an arraynums, there is a sliding window of sizekwhich is moving from the very left of the array to the very right. You can only see theknumbers in the window. Each time the sliding window m...

mike_learns_to_rock的博客 611

洛谷P5707 【深基2.例12】上学迟到(c语言)

第一篇题解 题目描述 yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。 输入格式 两个正整数 s,v,意思已经在题目中给定

cc_love_program的博客 1万+

LeetCode:求滑动窗口最大的数

Given an array nums,there is a sliding window of size k which is moving from the very left of the array to the very right.You can only see the k number in the window.Each time the sliding window moves right by one position.Return the max window. Example.

Jiangtagong的博客 352

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2049

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

LeetCode 239 Sliding Window Maximum

LeetCode 239 Sliding Window Maximum 思路 相当有趣的一道题,除了暴力外有三种解法 有序集合 使用multiset,初始化前k个数,然后每次查找-删除-添加-取最大值即可。C++里set multiset是有序的,虽然不支持随机访问,但是指定greater模板参数后就可以直接使用*set.begin()获得最大值了。 双端队列 维护一个双端队列,该队列总是保持如下特性 队列中任一位置前的元素总比该位置的大 队列最前端元素是最大值 队列最大为k 上述特性能够保证在O(1)

EricJeffrey的博客 322

2026年数学建模国赛B题无线电干扰源的快速自动定位与清除 论文详细解析

数学建模竞赛论文无线电干扰源的快速自动定位与清除2026 年高教社杯全国大学生数学建模竞赛 B 题完整求解论文交会定位、极大极小测点优化、自适应多频道搜索与定向源恢复的统一建模模型、算法、代码、图表与验证一体化交付本文研究圆形目标区域中多个未知无线电干扰源的快速检测、定位与清除问题,建立了由误差楔交会模型、角度观测信息模型、分层勘测模型、鲁棒射线交会模型和定向覆盖反馈模型组成的统一求解框架。模型同时覆盖题目中的四个子问题:多测向射线形成的多边形定位区域及直径、第二个测点的极大极小优选、全向源自动搜索清除策略

YOLO 356

【leetcode】239. Sliding Window Maximum

求滑动窗口括起来的数组中的最大值。 最简单的方法就是暴力法,但时间复杂度为O(nk),这种hard题暴力法不用想都知道是不能过的。 思路1: 使用双端队列。用双端队列作为存储空间,存储方法如下 从左往右依次遍历数组,如果队列为空,那么将当前元素的添加到队列的左边(index和元素是一一对应的,入栈index相当于入栈了元素) 如果当前队列不为空,且当前元素小于等于队列最右端元素,那么将当前元素...

很吵请安静 799

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[Leetcode]_239 Sliding Window Maximum

/** * Index: 239 * Title: Sliding Window Maximum * Author: ltree98 **/ 题意 给定一个数组, 有一个长度为k的窗口从数组头部开始向后滑动,每次滑动1位; 输出每次窗口内最大值序列。 注意: k保证是合法的,即 k >= 1 且 k <= 数组长度 数组不会为空 测试样例中存在数组为空的情况 我...

继续激情,继续奋斗。 483

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Leetcode】239. Sliding Window Maximum

这是一道很简单的单调队列的应用。单调队列简单的说,就是一种每次加元素的同时,要保持队列单调性的数据结构。本题基本思路是,维护一个双端队列,使得队列头就是当前滑动窗口的最大值,然后队列第二个数就是当前滑动窗口的次大数,以此类推。维护的方式是,每push一个数进去的时候,就把比该数小于等于的队列尾的数全pop出来,然后如果队首数字已经脱离了滑动窗口,也要pop出来。每次操作完后把队头的数加入最后结果,最后返回。,返回一个数组,每个数字代表原数组每。个数的滑动窗口的最大值。

数学、算法爱好者的博客 330

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode 239: Sliding Window Maximum

leetcode 239: Sliding Window Maximum python c++ java

西施豆腐渣 1万+

LeetCode //C - 239. Sliding Window Maximum

【代码】LeetCode //C - 239. Sliding Window Maximum。

Made in Code 1108

Leetcode 239. Sliding Window Maximum

题目描述:给出一个数组以及大小为k的滑动窗口,返回每个窗口中的最大值。 题目链接:Leetcode 239. Sliding Window Maximum 最简单的思路就是遍历然后用max函数返回最大值,但是这样的话每次都要遍历一次来找最大值。如果是笔试遇到可以这样做,如果是面试过程中就就应该提出一些更好的idea比如滑动过程中维护一个有序的窗口,画一格,加入的和退出的值。 大概思路是用双向...

Za七杂⑧ 239

Leetcode 239. Sliding Window Maximum (python&c++)

Leetcode 239. Sliding Window Maximum题目:解法:deque实现的单调队列 题目: 解法:deque实现的单调队列 关于单调队列的解释:https://medium.com/algorithms-and-leetcode/monotonic-queue-explained-with-leetcode-problems-7db7c530c1d6 举个例子来说明单调队列,现在有个递减的单调队列[6,4,3]: 新元素为2,队列变为[6,4,3,2] 新元素为5,队列变为[6

qq_37821701的博客 471

Leetcode 239. Sliding Window Maximum(python)

Leetcode 239. Sliding Window Maximum题目解法1:brutal force解法2:利用单调递减双向队列解法3:动态规划,构建左右最大数组 题目 Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the...

qq_37821701的博客 622

[Leetcode 239, Hard] Sliding Window Maximum

[Leetcode 239, Hard] Sliding Window Maximum

算法的实践 591

LeetCode 239. Sliding Window Maximum 题解

本题是单调队列的经典应用。使用双端队列维护单调递减序列队首是当前窗口的最大值及时移除不在窗口内和较小的元素。

cannonjinx的博客 2656

[leetcode] 239. Sliding Window Maximum 解题报告

题目链接: https://leetcode.com/problems/sliding-window-maximum/ Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. Y

小榕流光的专栏 1364

[leetcode 239]Sliding Window Maximum

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window

ER_Plough的专栏 844

LeetCode239:Sliding Window Maximum

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window m...

卷卷萌的博客 301
上一篇: LeetCode 278. First Bad Version
下一篇: LeetCode. 314 Binary Tree Vertical Order Traversal
ActiveCoder
博客等级 码龄11年 4粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值