leetcode239. 滑动窗口最大值(思路+详解)

一:题目

在这里插入图片描述

二:思路

1.这个题不能用优先队列,虽然我们可以通过优先队列得到最大值,但是我们在移动 窗口的时候,便不可以正常的删除元素了
2.虽然不能用优先对列,但是我们依然希望可以得到队首的元素的时候是最大值,同时还不影响移动窗口的时候 pop()元素了,这就引出了单调队列
3.单调队列中的元素是从大到小(注意不是全部的元素放入单调队列中) 那就和优先队列没啥区别了。
4.单调队列中
push(value)元素的时候,value值不能比出口的元素大,直到找到一个出口的元素
比vaule值大,OK,将其push进去(这样就保证了单调队列是递减的,我们只考虑在K
个值中的最大值即可,无关去考虑队列中时候有k个值)

pop(value)元素的时候,如果和单调队列中的队首元素相等,那么我们pop了,如果不相等
我们就不用管他(因为我们的队列中可能在前面push的时候已经将其淘汰了)

三:上码

class Solution {class MyQueue{//定义一个类  这个类当中的方法 可以被调用
public:deque<int> que;void pop(int value) {if(!que.empty() && value == que.front()) {que.pop_front();}}//我们push元素的时候 直到入口元素大于value值为止(保证单调队列的递增)void push(int value) {while(!que.empty() && value > que.back()){que.pop_back();}que.push_back(value);}//访问队首元素int front() {return que.front();}};public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {/**思路:1.这个题不能用优先队列,虽然我们可以通过优先队列得到最大值,但是我们在移动窗口的时候,便不可以正常的删除元素了2.虽然不能用优先对列,但是我们依然希望可以得到队首的元素的时候是最大值,同时还不影响移动窗口的时候 pop()元素了,这就引出了单调队列3.单调队列中的元素是从大到小(注意不是全部的元素放入单调队列中) 那就和优先队列没啥区别了。4.单调队列中push(value)元素的时候,value值不能比出口的元素大,直到找到一个出口的元素比vaule值大,OK,将其push进去(这样就保证了单调队列是递减的,我们只考虑在K个值中的最大值即可,无关去考虑队列中时候有k个值) pop(value)元素的时候,如果和单调队列中的队首元素相等,那么我们pop了,如果不相等我们就不用管他(因为我们的队列中可能在前面push的时候已经将其淘汰了)**/MyQueue que;vector<int> ans;for(int i = 0; i < k; i++) {que.push(nums[i]);}ans.push_back(que.front());for(int i = k; i < nums.size(); i++) {que.pop(nums[i-k]);//移除上个窗口首元素que.push(nums[i]);//push进去上个窗口右边挨着的元素ans.push_back(que.front());}return ans;}
};

在这里插入图片描述
如有疑问 请留言!!!!!!!!!!!!!!!!!!

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

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

相关文章

《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

第 10 章 部署10.1 部署到 IISASP.NET Core 应用程序支持部署到 IIS 中&#xff0c;之后它将作为应用程序的反向代理服务器和负载均衡器&#xff0c;向应用程序中转传入的 HTTP 请求默认情况下&#xff0c;ASP.NET Core 项目的 Program 类使用如下方式创建 WebHostpublic stati…

翠香猕猴桃 和 薄皮核桃,快来下单

猴桃品种有很多&#xff0c;但不是所有的果子都叫翠香。椭圆形&#xff0c;果喙端较尖&#xff0c;黄褐色硬短茸毛&#xff1b;果肉翠绿色&#xff0c;质细多汁&#xff0c;香甜爽口&#xff0c;有芳香味&#xff0c;白色果心。这就是“翠香”&#xff0c;是集酸甜香于一身的猕…

你可能没有听说过 js中的 DOM操作还有这个: HTMLCollection 和 NodeList

一文了解DOM操作中的HTMLCollection和NodeList⛱️序言&#x1f388;一、基础知识1. 定义&#xff08;1&#xff09;HTMLCollection&#xff08;2&#xff09;NodeList2. 属性和方法&#xff08;1&#xff09;HTMLCollection&#xff08;2&#xff09;NodeList&#x1fa81;二、…

leetcode144. 二叉树的前序遍历(递归+迭代)

一:题目 二&#xff1a;上码 1&#xff1a;递归 class Solution { public:void preorder(TreeNode* root,vector<int>&v ) {if(root NULL) return;v.push_back(root->val);preorder(root->left,v);preorder(root->right,v);}vector<int> preorderT…

都说性能调优难?玩转这3款工具,让你秒变“老司机”!

鲁迅说过&#xff1a;菜鸟写业务&#xff0c;老鸟搭架构&#xff0c;高手玩调优。性能调优可谓是食物链顶端的技术&#xff0c;高薪面试必备良品。然而有不少的开发者&#xff0c;工作多年&#xff0c;却对性能调优几乎一无所知&#xff0c;今天就带大家掰扯掰扯&#xff0c;从…

一文梳理JavaScript中常见的七大继承方案

阐述JavaScript中常见的七大继承方案&#x1f4d6;序言&#x1f4d4;文章内容抢先看&#x1f4dd;一、基础知识预备1. 继承的定义2. 继承的方式&#x1f4da;二、6大常见继承方式1. 原型链继承 &#x1f4a1;&#xff08;1&#xff09;构造函数、原型和实例的关系&#xff08;2…

微软发布 Microsoft Edge 85 稳定版

喜欢就关注我们吧&#xff01;微软推出了 Microsoft Edge 85 稳定版&#xff08;85.0.564.41&#xff09;&#xff0c;现在正逐步向用户推送。此版本带来了以下新特性&#xff1a;收藏夹和设置的本地同步。现在可以在自己的环境中的 Active Directory 配置文件之间同步浏览器收…

leetcode94. 二叉树的中序遍历(左中右)

二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

浅谈前端路由原理hash和history

浅谈前端路由原理hash和history&#x1f3b9;序言&#x1f3b8;一、前端路由原理1、SPA2、什么时候需要路由&#x1f3b7;二、Hash模式1、定义2、网页url组成部分&#xff08;1&#xff09;了解几个url的属性&#xff08;2&#xff09;演示3、hash的特点&#x1f3ba;三、Histo…

leetcode145. 二叉树的后序遍历

一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*…

.NET Core API文档管理组件 Swagger

Swagger这个优秀的开源项目相信大家都用过&#xff0c;不多介绍了&#xff0c;这里简单记录一下使用过程。开源地址&#xff1a;https://github.com/domaindrivendev/Swashbuckle.AspNetCore在项目中添加组件Install-Package Swashbuckle.AspNetCore下面用最少的代码完成接入&a…

「3.4w字」超保姆级教程带你实现Promise的核心功能

保姆级详解promise的核心功能&#x1f4da;序言&#x1f4cb;文章内容抢先看&#x1f4f0;一、js的同步模式和异步模式1. 单线程&#x1f4a1;2. 同步模式&#x1f4a1;&#xff08;1&#xff09;定义&#xff08;2&#xff09;图例3. 异步模式&#x1f4a1;&#xff08;1&…

leetcode199. 二叉树的右视图(层序遍历03)

一:题目 二&#xff1a;上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(n…

如何做好一个开源项目之徽章(二)

在上一篇【如何做好一个开源项目&#xff08;一&#xff09;】&#xff0c;笔者已经介绍过开源项目运作和维护的一些理念了&#xff0c;本篇开始&#xff0c;笔者将着重于介绍一些开源项目维护过程中的一些细节&#xff0c;比如徽章、构建等等。由于最近经常出差&#xff0c;所…

值得关注的HTML基础

值得关注的HTML基础&#x1f973;序言&#x1f60b;一、网页三大元素&#x1f61c;二、HTML简介1. 定义2. 发展历史&#x1f61d;三、HTML结构1. 引例阐述2. 特点3. HTML页面结构&#xff08;1&#xff09;DOCTYPE&#xff08;2&#xff09;html&#xff08;3&#xff09;head&…

leetcode637. 二叉树的层平均值(层序遍历04)

一:题目 二&#xff1a;上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(n…

leetcode429. N 叉树的层序遍历(层序遍历05)

一:题目 二&#xff1a;上码 /* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node() {}Node(int _val) {val _val;}Node(int _val, vector<Node*> _children) {val _val;children _children;} }; */class Solution { publi…

10分钟带你探索css中更为奇妙的奥秘

10分钟带你探索css中更为奇妙的奥秘&#x1f4d6;序言&#x1f4c3;一、css是啥1. CSS是什么2. 诞生背景3. 基础规则&#xff08;1&#xff09;一些基础规则&#xff08;2&#xff09;其他重要的语法&#xff08;3&#xff09;选择器&#xff08;4&#xff09;层叠与继承1&…

将微服务部署到 Azure Kubernetes 服务 (AKS) 实践

介绍本文的目的是&#xff1a;通过使用 DockerHub 和 Azure Kubernetes Service (AKS) 将之前 使用 .NET 和 Docker 构建的微服务 部署到微软 Azure 云上&#xff0c;来介绍微服务的基本部署过程。推送到 Docker HubDocker Hub 是世界上最大的容器镜像库和社区。许多产品&#…

leetcode 515. 在每个树行中找最大值(层序遍历06)

一:题目 二&#xff1a;上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(n…