hot11-滑动窗口最大值

news/2024/10/19 3:26:31/

leetcode原题链接:滑动窗口最大值

题目描述

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

返回 滑动窗口中的最大值 

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

解题方法:采用大顶堆,保存当前窗口内到最大元素,同时将越界的所有堆顶元素弹出防止过期的堆顶元素污染解。

C++代码

#include <vector>
#include <queue>
#include <utility>
class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n = nums.size();using pair_type = std::pair<int,int>;using vec_type = std::vector<pair_type>;auto cmp = [](pair_type p1, pair_type p2) {return p1.first < p2.first;};std::priority_queue<pair_type, vec_type, decltype(cmp)> q(cmp);std::vector<int> result;for (int i = 0; i < k; i++) {q.push({nums[i], i});//保存数值和对应的下标}result.emplace_back(q.top().first);for (int i = k; i < n; i++) {q.push({nums[i], i});//在弹出超界元素前先push,可以保证下面的q.top()非空,从而不会影响代码segmentfaultwhile (q.top().second <= i - k) { //先弹出滑动窗口左边的越界元素q.pop();}//q.push({nums[i], i}); // 切记,代码不能从上面移到这里result.emplace_back(q.top().first);}return result;}
};

http://www.ppmy.cn/news/477702.html

相关文章

C#配置文件多语言切换

以下是一个简单的解决方案&#xff0c;包括代码和注释。这个方案使用了资源文件和配置文件来实现多语言切换&#xff0c;同时将代码封装成了一个类&#xff0c;方便调用。 首先&#xff0c;我们需要创建三个资源文件&#xff0c;分别为&#xff1a; - Resources.resx&#xf…

MySQL优化--MVCC

目录 概念 MVCC的具体实现 隐式字段 undo log日志 概念 undo log版本链 readview 接上文&#xff0c;redo log保证了事务的持久性&#xff0c;undo log 保证了事务的原子性和一致性 那&#xff0c;隔离性是如何保证的呢&#xff1f; 锁&#xff1a;排他锁&#xff08;如…

PS-图层蒙版

PS-图层蒙版 抠图的基础方法-橡皮擦擦除法 缺点&#xff1a; 是在原图像上直接擦除不要的部分&#xff0c;会破坏原图像&#xff0c;操作不可逆&#xff0c;一旦操作失误&#xff0c;不能还原。 可逆的抠图方法&#xff1a;蒙版 蒙&#xff1a;遮盖起来 运用蒙版抠图的优点&…

PS学习-蒙版简介

蒙版简介&#xff1a;蒙版是用于调节图像修改程度以及进行局部调整的命令&#xff1b;蒙版只有三种颜色&#xff0c;黑色、白色、灰色&#xff1b;其中黑色代表保护&#xff0c;白色代表允许修改&#xff0c;灰色则用来调整被修改的程度。按住Alt键点击蒙版缩略图&#xff0c;可…

【PS】photoshop怎么添加层遮罩?

层遮罩其实就是&#xff1a;剪贴蒙版。 蒙版就是把上层的彩纸贴到下层的底板上&#xff0c;下层底板是什么形状&#xff0c;剪贴出来的效果就是什么形状的。方法如下&#xff1a; 1、打开PS&#xff0c;新建一个空白文档&#xff0c;输入一些文字。 2、在文字图层上面新建一个图…

PS利用蒙版把图片调暗

1.ctrlj将图片复制一层 2.在新图层按住alt添加黑色蒙版 3.调整色相/饱和度中的明度&#xff0c;将其拉低

2015年6月26日-ps图层蒙版

图层蒙版 图层蒙版是用来控制图层的显示范围的&#xff0c;常用于层与层之间的混合。 在贴之间先扣一个选区出来&#xff0c;然后选择编辑->选择性粘贴->贴入&#xff1a; 这样&#xff0c;新贴进去的图层是以蒙版的形式了。当然还可以直接图层->图层蒙版 ->显示…

ps如何创造图层蒙版

注意看红色圈&#xff0c;共有7个步骤&#xff0c;按顺序操作下去 点击矩形创造一个不带锁的颜色块 3.选择到刚刚创造的图层 4.然后点击下方的创造图层蒙版按钮 5.点击完图层蒙版之后然后点击图层上的那个图层蒙版 6.然后再点击画笔工具 7.然后就可以再图层蒙版内涂颜色&#…