代码随想录打卡第39天:单调栈

1.单调栈

1.什么是单调栈?

单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。

2.单调栈一般解决什么问题?

通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。

3.单调栈需要考虑什么?

  1. 单调栈里存放的元素是什么?单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。
  2. 单调栈里元素是递增呢? 还是递减呢?

4.单调栈需要判断的条件

  • 当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况
  • 当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况
  • 当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况

2.739每日温度

1.解题思路

由于题目中需要找到右边第一个比今天大的温度,与单调栈的思路相匹配,所以本题使用单调栈来解决问题。

2.具体实现

st存放的是顺序遍历时还未找到右边第一个比今天大的温度。

ret存放的是对应的右边第一个比今天大的温度数组,默认情况下全为-1。

  • 当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况,没有找到右边的大于的元素,直接入栈
  • 当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况,没有找到右边的大于的元素,直接入栈
  • 当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况,找到了右边的大于的元素,出栈放到对应下标位置的ret,继续判断,直到遇到不大于的元素之后结束出栈操作,然后将当前值入栈
  • 由前面的可以看出,这个st存放的是一个单调递减的。
  • while(!st.empty()&&temperatures[st.top()] < temperatures[i]){ret[st.top()] = i - st.top();//cout<<st.top()<<i-st.top()<<endl;st.pop();}st.push(i);

3.具体代码

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;//存放的是下标int n = temperatures.size();vector<int> ret(n,0);st.push(0);for(int i = 1;i<n;i++){//cout<<st.top()<<temperatures[st.top()]<<i-st.top()<<endl;if(temperatures[st.top()]>temperatures[i]){st.push(i);}else if(temperatures[st.top()]== temperatures[i]){st.push(i);}else{while(!st.empty()&&temperatures[st.top()] < temperatures[i]){ret[st.top()] = i - st.top();//cout<<st.top()<<i-st.top()<<endl;st.pop();}st.push(i);}}return ret;}
};

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

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

相关文章

吴恩达2022机器学习专项课程C2W2:实验SoftMax

目录 Softmax函数1.简述2.Numpy实现softmax函数 softmax成本函数softmax应用于神经网络1.自定义数据集2.构建模型3.使用模型预测4.改良模型代码&#xff08;softmax转换输出&#xff09; Softmax函数 1.简述 在 Softmax 回归和带有 Softmax 输出的神经网络中&#xff0c;模型…

小程序如何更换营业执照

​因为商家经营业务的变更&#xff0c;尤其是之前的营业执照注销等原因&#xff0c;导致要求更换小程序主体。下面就具体介绍如何进行变更。 1. 登录mp.weixin.qq.com&#xff0c;找到设置->基本设置&#xff0c;在主体信息字段&#xff0c;点击小程序主体变更。主体变更分…

【运维项目经历|015】:Nginx Web服务性能提升与优化项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的技术性问题 问题1&#xff1a;本次项目的人员配置&#xff1f; 问题2&#xff1a;本次项目的周期&am…

教学基本功包括什么技能有哪些

教师的工作不仅仅是传授知识&#xff0c;更多是引导学生探索&#xff0c;激发他们的创造力。要做到这一点&#xff0c;需要具备一些基本技能。 扎实的专业知识。这是教师的根基&#xff0c;如果教师自己对所教的科目都不熟悉&#xff0c;那么教学就会失去方向。不断学习更新自己…

Markdown 语法详解

Markdown 语法详解 Markdown 是一种轻量级标记语言&#xff0c;可以通过简单的标记符号来格式化文本。以下是详细的 Markdown 语法说明以及对应的使用示例。 标题 Markdown 使用 # 号来表示标题&#xff0c;# 的数量代表标题的等级。 # 这是一号标题 ## 这是二号标题 ### 这…

基于python开发用于深度学习模型训练过程loss值曲线的平滑处理模块

深度学习网络模型的loss曲线是训练过程中非常重要的一个监控指标&#xff0c;它能够直观地反映模型的学习状态以及可能存在的问题。以下是对深度学习网络模型loss曲线的详细介绍&#xff1a; 一、loss曲线的基本概念 在深度学习的训练过程中&#xff0c;loss函数用于衡量模型…

0521_网络编程5

练习1&#xff1a; TFTP通信过程总结 服务器在69号端口等待客户端的请求服务器若批准此请求&#xff0c;则使用 临时端口 与客户端进行通信。每个数据包的编号都有变化&#xff08;从1开始&#xff09;每个数据包都要得到ACK的确认&#xff0c;如果出现超时&#xff0c;则需要…

骑车不戴头盔监测摄像机

骑行是一种健康的出行方式&#xff0c;但是在骑行途中不戴头盔存在安全隐患&#xff0c;容易造成头部受伤。为了规范骑行行为&#xff0c;保障骑行安全&#xff0c;可以考虑使用骑车不戴头盔监测摄像机进行监测和识别。这种摄像机可以通过智能识别技术&#xff0c;实时监测骑自…

7-Zip是什么呢

1. 简介 7-Zip 是一个功能强大、免费开源的文件压缩和解压缩工具&#xff0c;适用于个人用户和企业用户&#xff0c;可以在多种操作系统上进行使用&#xff0c;并且支持广泛的压缩格式和高级功能。 2. 特点与优势 开源免费&#xff1a;7-Zip 是免费的开源软件&#xff0c;可…

transformer的特点

Transformers是一种用于处理序列数据的神经网络架构&#xff0c;最初由Vaswani等人在2017年提出&#xff0c;主要用于自然语言处理任务。与传统的循环神经网络&#xff08;RNN&#xff09;和卷积神经网络&#xff08;CNN&#xff09;不同&#xff0c;Transformers采用了一种全新…

装机数台,依旧还会心念i5-12600KF的性能和性价比优势:

近几个月的时间中&#xff0c; 装机差不多4台电脑&#xff0c;由于工作需要&#xff0c;计划年中再增添一台。 目前市场上英特尔CPU促销非常火爆&#xff0c;第12代、第13代以及第14代的产品在年中有适当的优惠。 年中也是装机的旺季&#xff0c;各种相关配件也相对便宜一些。…

PS系统教学02

多个图片同时进行打开 在素材库里面选中两张图片&#xff0c;直接拖进PS软件中&#xff0c;此时会显示其中一张。当按下回车键会显示另一张。 当图层过多&#xff0c;需要进行选择&#xff0c;其中某一张图片&#xff0c;按住Ctrl键&#xff0c;进行选择点击&#xff0c;可以移…

制造企业如何通过PLM系统实现BOM管理的飞跃

摘要 在当今快速变化的制造行业中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统的应用已成为企业提升效率、降低成本和增强竞争力的关键。本文将探讨PLM系统如何通过其先进的BOM&#xff08;物料清单&#xff09;管理功能&#xff0c;帮助制造企业在整个产品生…

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…

PbootCMS后台用户账号密码时进行重置工具

1、工具作用: 工具用于忘记PbootCMS后台用户账号密码时进行重置。 2、下载地址&#xff1a;https://pan.quark.cn/s/2b017974f2c0 3、使用方法&#xff1a; 1&#xff09;下载重置工具解压包&#xff0c;解压后将resetpw.php文件直接上传到网站根目录下&#xff1b; 2&…

【Linux 网络编程】协议的分层知识!

文章目录 1. 计算机网络背景2. 认识 "协议"3. 协议分层 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广…

Linux内网中安装nginx详细教程

本章教程主要介绍如何在Linux中通过rpm安装nginx 1、下载安装 下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.1-1.el7.ngx.x86_64.rpm sudo yum install -y nginx-1.20.1-1.el7.ngx.x86_64.rpm2、启动Nginx并设置开机启动 root用户启动nginx默认监听8…

使用 Docker 环境变量轻松配置 Spring Boot 应用程序:详细指南

在 Spring Boot 应用程序中&#xff0c;可以通过 Docker 传递环境变量来配置数据库连接、密码和账号等参数。以下是一个详细的步骤说明&#xff0c;涵盖了如何设置环境变量、配置 Spring Boot 应用程序以及将其打包到 Docker 容器中。 1. 配置 Spring Boot 应用程序 首先&…

ORA-27041: redo文件 unable to open file处理

现场项目经理反馈有个测试环境的u01满&#xff0c;赶紧回电脑边查看 [rootdb ~]# df -h|grep u01 /dev/mapper/ol-u01 150G 150G 20K 100% /u01 本以为是审计日志*.aud导致的&#xff0c;通过查看发现alert_orcl.log特别的大&#xff0c;98G大小了,查看日志最后…

Spring基础知识总结(纯文字版)

一、Spring IoC 1.1 重要概念 1&#xff09;控制反转&#xff08;Inversion of control&#xff09; 控制反转是一种通过描述&#xff08;在java中通过xml或者注解&#xff09;并通过第三方去产生或获取特定对象的方式。 控制反转IoC(Inversion of Control)是说创建对象的控…