LeetCode 239. 滑动窗口最大值(双端队列+单调栈)

文章目录

    • 1. 题目信息
    • 2. 解题
      • 2.1 暴力法
      • 2.2 双端队列法

1. 题目信息

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

返回滑动窗口中的最大值。

示例:输入: 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

提示:

你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。

进阶:

你能在线性时间复杂度内解决此题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 暴力法

双重循环查找,O(nk)复杂度
在这里插入图片描述

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {if(nums.size() == 0)return {};int maxnum, i, j;vector<int> ans;for(i = 0; i < nums.size()-k+1; ++i){maxnum = nums[i];for(j = i+1; j < k+i; ++j){if(nums[j] > maxnum)maxnum = nums[j];}ans.push_back(maxnum);}return ans;}
};

2.2 双端队列法

将双端队列看做栈,单调递减栈法。

  • 在双端队列里保存下标
  • 队首保存最大的,队尾保存小的
  • 但是注意规则:
  1. 过了窗口的范围的删除
  2. 在窗口范围内的k个,每加入一个数nums[i],只保留前面比它大的,<=nums[i] 的没必要存在,该窗口内它是比较大的

对 {1,3,-1,-3,5,3,6,7},k = 3
先建立前k个元素的队列:{1},{1,3},{1,3,-1}(队列变化过程)(为了方便我用元素值表示)
对后面n-k个元素分别操作:
{3,-1,-3}
{-1,-3, 5}
{-3, 5,3}
{5,3,,6}
{36,7}
每次取出队首就是答案。3,3,5,5,6,7
每个元素进出队列,时间复杂度O(n)
在这里插入图片描述

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {if(nums.size() == 0)return {};deque<int> q;vector<int> ans;int i;for(i = 0; i < k; ++i){while(!q.empty() && nums[i] >= nums[q.back()]){q.pop_back();// <=nums[i]的前面的存的,无意义,删掉}q.push_back(i);}ans.push_back(nums[q.front()]);for(i = k; i < nums.size(); ++i){if(!q.empty() && i-k+1 > q.front())q.pop_front();//过了窗口了,删除while(!q.empty() && nums[i] >= nums[q.back()]){q.pop_back();}q.push_back(i);ans.push_back(nums[q.front()]);}return ans;}
};

《剑指Offer》面试题59 - I. 滑动窗口的最大值

class Solution {	//2020.2.21
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {if(nums.empty())return {};int l = 1, r = 0;vector<int> ans;deque<int> q;while(k--){while(!q.empty() && nums[q.back()] <= nums[r]){q.pop_back();}q.push_back(r++);}ans.push_back(nums[q.front()]);while(r < nums.size()){if(q.front() < l)q.pop_front();while(!q.empty() && nums[q.back()] <= nums[r]){q.pop_back();}q.push_back(r++);l++;ans.push_back(nums[q.front()]);}return ans;}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Airbnb搜索:重排序阶段如何优化搜索结果多样性?

文 | 谷育龙Eric编 | QvQ我是谷育龙Eric&#xff0c;研究方向有深度学习、搜索推荐&#xff0c;喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。本文将基于Airbnb KDD 2020年的论文&#xff0c;介绍Airbnb搜索排序中在重排序阶段如何解决多样性的问题&#xff0c;对工业…

肖仰华 | 做个“有知识”的机器人

本文转载自公众号:知识工场。肖仰华博士&#xff0c;复旦大学计算机科学与技术学院教授&#xff0c;博士生导师&#xff0c;知识工场实验室负责人。本文是肖仰华教授应《中国计算机学会通信》邀请所撰写的特邀文章&#xff0c;全文见 CCCF 2019 年第 5 期。摘要&#xff1a;时下…

【NLP-NER】命名实体识别

NLP-NER】命名实体识别&#xff1a;https://zhuanlan.zhihu.com/p/88544122

pytorch基础一:张量

简单记录以便查阅 张量 一、创建张量 x torch.empty(5,3) # 创建未初始化矩阵张量 x torch.rand(5,3) # 创建初始化随机矩阵张量 x torch.zeros(5,3,dtypetorch.long) # 创建0填充矩阵张量 x torch.tensor([5.5,3]) …

消息中间件系列(九):详解RocketMQ的架构设计、关键特性、与应用场景

内容大纲&#xff1a; RocketMQ的简介与演进 RocketMQ的架构设计 RocketMQ的关键特性 RocketMQ的应用场景 RocketMQ的简介 RocketMQ一个纯java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里研发的一个队列模型的消息中间件&#xff0c;后开…

LeetCode 151. 翻转字符串里的单词(栈)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a;输入: "the sky is blue" 输出: "blue is sky the" 示例 2&#xff1a;输入: " hello world! " 输出: "world! hel…

推荐系统架构与算法流程详解

文 | yijiapan腾讯 WXG 数据分析师推荐算法的理解如果说互联网的目标就是连接一切&#xff0c;那么推荐系统的作用就是建立更加有效率的连接&#xff0c;推荐系统可以更有效率的连接用户与内容和服务&#xff0c;节约了大量的时间和成本。如果把推荐系统简单拆开来看&#xff0…

Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理

python读写txt文件 文件的打开的两种方式f open("data.txt","r") #设置文件对象 f.close() #关闭文件#为了方便&#xff0c;避免忘记close掉这个文件对象&#xff0c;可以用下面这种方式替代 with open(data.txt,"r") as f: #设置文件对象…

Pytorch 中 matmul 广播

Pytorch 中 matmul 广播方式 一、两个 1 维&#xff0c;向量内积 a torch.ones(3) b torch.ones(3) print(torch.matmul(a,b)) # tensor(3.) 二、两个 2 维&#xff0c;矩阵相乘 a torch.ones(3,4) b torch.ones(4,3) print(torch.matmul(a,b)) # tensor([[4., 4., 4…

论文浅尝 | 将字面含义嵌入知识图谱表示学习

论文笔记整理&#xff1a;吴桐桐&#xff0c;东南大学博士生&#xff0c;研究方向为知识图谱&#xff0c;自然语言处理。链接&#xff1a;https://arxiv.org/pdf/1802.00934.pdf本文主要关注知识图谱中的链接预测问题&#xff0c;在既有的知识图谱表示学习模型的基础上提出了一…

优知学院创始人陈睿:怎样做好一个创业公司CTO?

CTO 是企业内技术最高负责人&#xff0c;对企业的发展起到至关重要的作用。但随着公司的不断发展&#xff0c;CTO 的工作重心也会不断变化。只有在正确的阶段做正确的事&#xff0c;才能更好地为公司做出贡献。 本文作者&#xff1a;陈睿 优知学院创始人&#xff0c;10年产品技…

2020年深度学习调参技巧合集

文 | 山竹小果源 | NewBeeNLP编 | 夕小瑶的卖萌屋重点说明&#xff1a;本文主要为整理总结&#xff0c;大部分参考文末资料&#xff0c;感谢分享。寻找合适的学习率学习率是一个非常非常重要的超参数&#xff0c;这个参数呢&#xff0c;面对不同规模、不同batch-size、不同优化…

LeetCode 226. 翻转二叉树(DFS BFS)

文章目录1. 题目信息2. 解题2.1 DFS2.2 BFS1. 题目信息 翻转一棵二叉树。 示例&#xff1a;输入&#xff1a;4/ \2 7/ \ / \ 1 3 6 9输出&#xff1a;4/ \7 2/ \ / \ 9 6 3 1来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;…

论文浅尝 | GraphIE:基于图的信息抽取框架

笔记整理&#xff1a;吕欣泽&#xff0c;南京大学计算机科学与技术系&#xff0c;硕士研究生。论文连接&#xff1a;https://arxiv.org/pdf/1810.13083.pdf发表会议&#xff1a;NAACL 2019摘要大多数现代信息提取&#xff08;IE&#xff09;系统都是作为顺序标记器实现的&#…

lambda函数+map函数的结合使用 list(map(lambda x: list(x)[0], X))

Q1&#xff1a;什么是lambda函数&#xff1f;怎么定义&#xff1f;有什么作用&#xff1f; 知识点&#xff1a;lambda 解析&#xff1a;lambda叫做匿名函数&#xff0c;是一种不需要提前对函数进行定义再使用的情况下就可以使用的函数 1 定义规则&#xff1a;冒号的左边是原函数…

好产品,懂人性

好的产品无一例外&#xff0c;懂人性 张小龙曾经说过&#xff0c;产品经理要懂得抓住用户的贪、嗔、痴&#xff0c;培养用户对产品的粘性&#xff0c;就是要让用户对你的产品产生贪、嗔、痴。 贪是贪婪&#xff0c;嗔是嫉妒&#xff0c;痴是执着。 人类的贪婪、嫉妒和执著培…

Pytorch 实现 MLP

torch.nn是专门为神经网络设计的模块化接口。nn构建于 Autograd之上&#xff0c;可用来定义和运行神经网络。 nn.functional&#xff0c;这个包中包含了神经网络中使用的一些常用函数&#xff0c;这些函数的特点是&#xff0c;不具有可学习的参数(如ReLU&#xff0c;pool&#…

LeetCode 104. 二叉树的最大深度

文章目录1. 题目信息2. 解题2.1 递归法2.2 按层遍历1. 题目信息 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&…

谷歌重磅:可以优化自己的优化器!手动调参或将成为历史!?

文 | 小轶编 | 夕小瑶背景Google Brain团队发布的一篇最新论文在外网引发热议&#xff0c;或将成为Deep Learning发展历程上里程碑式的工作。它所讨论的&#xff0c;是所有AI行业者都要面对的——Deep Learning中的优化问题。也就是&#xff0c;如何更好地训练一个模型。深度模…

最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)

1 小目标检测&#xff1a;综述&#xff1a;综述论文Augmentation for small object detection深度学习笔记&#xff08;十&#xff09;Augmentation for small object detection&#xff08;翻译&#xff09; 吴建明wujianning&#xff1a;小目标检测的增强算法 机器之心&#…