力扣hot100——239.滑动窗口最大值

题目链接: 239. 滑动窗口最大值 - 力扣(LeetCode)

优先级队列

优先级队列自动按照大小排序,队首即为最大元素,但取队首时要注意元素是否在滑动窗口内,如果不在则弹出。

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {priority_queue<pair<int,int>> q;//(元素值,元素索引)//在第一个滑动窗口找最大元素for(int i=0;i<k;i++){q.emplace(nums[i],i);}vector<int> res={q.top().first};//移动窗口for(int i=k;i<nums.size();i++){q.emplace(nums[i],i);//移除不在窗口范围内的元素while(q.top().second<=i-k){q.pop();}res.push_back(q.top().first);}return res;}
};
  • 时间复杂度:O(nlogn) 每个元素都被插入和删除一次
  • 空间复杂度:O(n)

单调队列

同一个窗口内,如果右侧元素大于左侧元素,那么左侧元素不必考虑,因为此时窗口内的最大元素一定不是左侧元素,并且当窗口向右移动时左侧元素可能不在窗口中,因此永久移除这样的左侧元素。

vector<int> maxSlidingWindow(vector<int>& nums, int k) {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;}
  • 时间复杂度:O(n) 遍历整个数组
  • 空间复杂度:O(k)

引用评论区的两句话来加深对单调队列的理解:

我悟了,队尾只要有更年轻(i越靠后)同时还能力更强(数值越大)的,留着其他比它更早入职同时能力却更差的没有什么意义,统统开了;队首的虽然能力最强,但是年龄最大,一旦发现它超过年龄范围(不在滑动窗口的范围内),不用看能力就可以直接开了。
我悟了, 队尾比不过同龄人的删掉,队头超出时代区间的删掉,历史就是这么不断更迭的。

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

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

相关文章

Alibaba国际站商品详情AP接口概述,json数据示例返回参考

前言 Alibaba国际站商品详情API&#xff08;通常称为item_get接口&#xff09;是阿里巴巴开放平台提供的一项核心服务&#xff0c;允许开发者通过商品ID获取商品的详细信息。该接口广泛应用于电商系统集成、数据分析、竞品监控等场景&#xff0c;支持企业自动化获取商品标题、…

[论文阅读]Adversarial Semantic Collisions

Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 对抗样本是相似的输入但是产生不同的模型输出&#xff0c;而语义冲突是对抗样本的逆…

25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)

上一篇关于属性表自动编号的文章因为涉及到代码&#xff08;【干货】在Arcgis中根据字段属性重新排序并自动编号的方法&#xff08;一&#xff09;&#xff09;&#xff0c;担心大家有些东西确实不熟悉&#xff0c;今天就更新一篇不需要代码也能达到这个目的的方法。主要的思路…

从后端研发角度出发,使用k8s部署业务系统

k8s&#xff0c;作为目前最流行的容器编排中间件&#xff0c;大家应该都听说过&#xff0c;很多公司也都在用&#xff0c;但基本都是运维在管理k8s&#xff0c;开发人员一般涉及不到&#xff0c;开发人员只需要写业务代码&#xff0c;然后运维人员负责制作镜像&#xff0c;然后…

Vue3 Echarts 3D圆柱体柱状图实现教程以及封装一个可复用的组件

文章目录 前言一、实现原理二、series ——type: "pictorialBar" 简介2.1 常用属性 三、代码实战3.1 封装一个echarts通用组件 echarts.vue3.2 首先实现一个基础柱状图3.3 添加上下2个椭圆面3.4 进阶封装一个可复用的3D圆形柱状图组件 总结 前言 在前端开发的数据可视…

WPF 上位机开发模板

WPF 上位机开发模板 WPF上位机开发模板,集成了基础操作菜单、海康视觉实时图像界面、串口通讯、网口通讯、主流PLC通讯、数据存储、图片存储、参数配置、权限管理、第三方webapi接口接入、数据追溯与查询等功能。 一、项目结构 WpfSupervisor/ ├── Models/ …

浏览器插件,提示:此扩展程序未遵循 Chrome 扩展程序的最佳实践,因此已无法再使用

1、发现的问题如下&#xff1a; 如果你是比较新的 Chrome 135.0.7049.42&#xff08;含&#xff09;以上版本的话&#xff0c;可以通过修改 chorme://flags 来彻底解决。 2、在浏览器分别输入两个地址&#xff1a; chrome://flags/#extension-manifest-v2-deprecation-disable…

【原创】从s3桶将对象导入ES建立索引,以便快速查找文件

总体功能&#xff1a; 这段程序的作用是&#xff1a; 从指定的S3桶中读取所有对象的元数据&#xff08;文件名、大小、最后修改时间、存储类型、ETag等&#xff09;&#xff0c;并把这些信息写入到Elasticsearch&#xff08;ES&#xff09;中&#xff0c;建立索引&#xff0c…

git 查看用户信息

在 Git 中查看用户信息是一项常见的任务&#xff0c;可以帮助你确认当前仓库的配置或全局的 Git 配置是否正确设置。你可以通过多种方式来查看这些信息。 查看全局用户信息 全局用户信息是应用于所有 Git 仓库的默认设置。要查看全局用户信息&#xff0c;可以使用以下命令&am…

制作JDK17 arm64基础镜像,解决字体安装问题

1、下载jdk17 arm64的安装包 官网下载地址 2、编写Dockerfile 图形验证码生成需要使用到相关字体&#xff0c;所以基础镜像把字体相关也安装上。 # 基础镜像 FROM arm64v8/centos:8.4.2105MAINTAINER hqh# 换源 RUN sed -i s|^mirrorlist|#mirrorlist|g /etc/yum.repos.d/…

人工智能数学基础(三):微积分初步

微积分作为数学的重要分支&#xff0c;为人工智能的发展提供了坚实的理论基础。从理解数据的变化趋势到优化模型参数&#xff0c;微积分的应用贯穿其中。本文将深入探讨微积分的核心概念&#xff0c;并结合 Python 编程实例&#xff0c;助力大家轻松掌握这些关键知识点。资源绑…

区块链密码学核心

文章目录 概要1. 基础密码学哈希函数&#xff08;Hash Function&#xff09;对称加密与非对称加密数字签名&#xff08;Digital Signature&#xff09;密钥管理 2. 区块链专用密码学技术零知识证明&#xff08;Zero-Knowledge Proof, ZKP&#xff09;同态加密&#xff08;Homom…

Java后端开发day39--方法引用

&#xff08;以下内容全部来自上述课程&#xff09; 1.1 含义 把已经有的方法拿过来用&#xff0c;当作函数式接口中抽象方法的方法体。 已经有的方法&#xff1a;可以是Java自己写的&#xff0c;也可以是第三方的。 示例语句&#xff1a; &#xff1a;&#xff1a;是方法引…

目前市面上知名的数据采集器

程序员爱自己动手打造一切&#xff0c;但这样离钱就会比较远。 市面上知名的数据采集工具 数据采集工具&#xff08;也称为网络爬虫或数据抓取工具&#xff09;在市场上有很多选择&#xff0c;以下是目前比较知名和广泛使用的工具分类介绍&#xff1a; 一、开源免费工具 Scra…

TP5兼容达梦国产数据库

1.首先数据库安装&#xff0c;部署时需配置大小写不敏感 2.安装PHP达梦扩展&#xff0c;一定要是对应版本&#xff08;兼容操作系统&#xff09;的扩展&#xff0c;否则会出现各种报错。参考官方文档&#xff1a;https://eco.dameng.com/document/dm/zh-cn/app-dev/php_php_new…

《解锁图像“高清密码”:超分辨率重建之路》

在图像的世界里&#xff0c;高分辨率意味着更多细节、更清晰的画面&#xff0c;就像用高清望远镜眺望远方&#xff0c;一切都纤毫毕现。可现实中&#xff0c;我们常被低分辨率图像困扰&#xff0c;模糊的监控画面、老旧照片里难以辨认的面容……不过别担心&#xff0c;图像超分…

整合 CountVectorizer 和 TfidfVectorizer 绘制词云图

本文分别整合 CountVectorizer 和 TfidfVectorizer 绘制词云图 ✨ CountVectorizer CountVectorizer 是 scikit-learn 中用于 文本特征提取 的一个工具&#xff0c;它的主要作用是将一组文本&#xff08;文本集合&#xff09;转换为词频向量&#xff08;Bag-of-Words&#xf…

Linux 用户管理

用户管理是 Linux 系统管理中的重要组成部分&#xff0c;它涉及到用户和用户组的创建、删除、修改以及权限分配等操作。以下是关于用户和用户组管理的详细说明&#xff1a; 一、用户和用户组的概念 &#xff08;一&#xff09;用户&#xff08;User&#xff09; 用户是系统中…

【HTTP/2和HTTP/3的应用现状:看不见的革命】

HTTP/2和HTTP/3的应用现状&#xff1a;看不见的革命 实际上&#xff0c;HTTP/2和HTTP/3已经被众多著名网站广泛采用&#xff0c;只是这场革命对普通用户来说是"无形"的。让我们揭开这个技术变革的真相。 著名网站的HTTP/2和HTTP/3采用情况 #mermaid-svg-MtfrNDo5DG…

青少年编程与数学 02-018 C++数据结构与算法 16课题、贪心算法

青少年编程与数学 02-018 C数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例&#xff08;一&#xff09;找零问题问题描述&#xff1a;贪心策略&#xff1a;示例代码&a…