二刷代码随想录——单调栈day59

文章目录

  • 前言
    • 单调栈知识点
  • 单调栈的特点
  • 一、503. 下一个更大元素 II
  • 二、42. 接雨水
  • 总结


前言

一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油!
二刷决定精刷了,于是参加了卡子哥的刷题班,训练营为期60天,我一定能坚持下去,迎来两个月后的脱变的,加油!
推荐一手卡子哥的刷题网站,感谢卡子哥。代码随想录

单调栈知识点

代码随想录二刷即将结束,但是刷题大业仍未止。

单调栈是一种特殊的数据结构,它遵循单调性原则,即栈内元素要么单调递增,要么单调递减。单调栈的作用在于解决一些特定的问题,如找到一个元素在其序列中左边或右边第一个比其大或小的元素,或者用于解决一些编程竞赛中的题目。

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

单调栈的特点

单调栈的特点是,在维护栈的时候,如果要入栈的元素比栈顶元素大(对于单调递减栈)或小(对于单调递增栈),则将栈顶元素出栈,直到栈顶元素小于(对于单调递减栈)或大于(对于单调递增栈)当前要入栈的元素,然后将元素入栈。这个过程需要遍历一遍元素,因此时间复杂度为O(n)。

在使用单调栈的时候首先要明确如下几点:

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

单调栈里元素是递增呢? 还是递减呢?

一、503. 下一个更大元素 II

503. 下一个更大元素 II
Note:控制实行单调栈

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> result(nums.size(), -1);if (nums.size() == 0) return result;//单调栈stack<int> st;st.push(0);for (int i = 1; i < nums.size() * 2; i++) {if (nums[i % nums.size()] < nums[st.top()]) st.push(i % nums.size());else if (nums[i % nums.size()] == nums[st.top()]) st.push(i % nums.size());else {while (!st.empty() && nums[i % nums.size()] > nums[st.top()]) {result[st.top()] = nums[i % nums.size()];st.pop();}st.push(i % nums.size());}}return result;}
};

二、42. 接雨水

42. 接雨水

Note:感受用单调栈解决经典题目

class Solution {
public:int trap(vector<int>& height) {if (height.size() <= 2) return 0;//单调栈stack<int> st;st.push(0);int res = 0;for (int i = 1; i < height.size(); i++) {if (height[i] < height[st.top()]) {st.push(i);} else if (height[i] == height[st.top()]) {st.pop();st.push(i);} else {while (!st.empty() && height[i] > height[st.top()]) {int mid = st.top();st.pop();if (!st.empty()) {int h = min(height[st.top()], height[i]) - height[mid];int w = i - st.top() - 1;res += h * w;}}st.push(i);}}return res;}
};

总结

单调栈的实现可以基于数组,也可以基于链表,具体取决于问题的需求和上下文。在实现时,可以选择将元素值或元素的位置下标入栈,这取决于问题是否需要找到元素的位置信息。

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

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

相关文章

门店稽查的主要涵盖范围

先有需求再有目标&#xff0c;门店稽查也是如此&#xff0c;当品牌有线下终端的查价、上架率、竞品调研等的需求&#xff0c;则需要安排神秘访员进行上门稽查&#xff0c;整个过程可以分为明访和暗访&#xff0c;稽查方式的不同&#xff0c;对于稽查的结果会有差异&#xff0c;…

HangZhou Java Journey P1

Java程序运行时类加载机制 下面是对这个流程的详细说明&#xff1a; JVM启动&#xff1a;当Java程序开始执行时&#xff0c;JVM首先启动。JVM的启动涉及到操作系统级别的进程创建和资源分配。 Bootstrap ClassLoader&#xff1a;JVM启动后&#xff0c;首先会初始化Bootstrap …

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现五

【简单介绍】 依托先进的目标检测算法YOLOv8与灵活的PyQt5界面开发框架&#xff0c;我们倾力打造出了一款集直观、易用与功能强大于一体的目标检测GUI界面软件。通过深度融合YOLOv8在目标识别领域的出色性能与PyQt5的精美界面设计&#xff0c;我们成功推出了一款高效且稳定的软…

电脑开机0x0000007B蓝屏怎么办?

电脑开机0x0000007B蓝屏怎么办啊?相信很多用户的电脑都有遇到过蓝屏的问题,最近有用户电脑一开机就蓝屏,并且显示0x0000007B错误代码,原本想通过安全模式进行修复,结果发现安全模式进不去,不知道该怎么解决。这可能与我们的内存或硬盘有关,尝试设置一下硬盘模式,看看是…

R语言随机抽取数据,并作两组数据间t检验,并保存抽取的数据,并绘制boxplot

前提&#xff1a;接着上述R脚本输出的seed结果来选择应该使用哪个seed比较合理&#xff0c;上个R脚本名字&#xff1a; “5utr_计算ABD中Ge1和Lt1的个数和均值以及按照TE个数小的进行随机100次抽样.R” 1.输入数据&#xff1a;“5utr-5d做ABD中有RG4和没有RG4的TE之间的T检验.c…

【标定】手动标定步骤

标定步骤&#xff08;简&#xff09;&#xff1a; 打开sscom&#xff0c;播放静态数据包。 然后打开udp_server和同目录下的calibration。 标定步骤&#xff08;具体&#xff09;&#xff1a; 输入原始数据 打点仪 把角点绝对坐标 保存下来 &#xff0c;放到calibration里&a…

基于51单片机的智能晾衣架设计资料(论文+源码+仿真)

目录 1、资料内容 2、整体架构流程 3、主控单元设计 4、LCD液晶显示 5、仿真图 6、程序 资料下载地址&#xff1a;基于51单片机的智能晾衣架设计资料(论文源码仿真) 1、资料内容 2、整体架构流程 为了实现晾衣自身能够完成对外界数据的采集与分析&#xff0c;集成控制环节我们采…

算法的本质

先来看看网上对“算法”的定义。 (1)百度百科&#xff1a;解题方案的准确而完整的描述。 老金疑问&#xff1a;把大象装冰箱的解题方案描述是算法吗&#xff1f;如果它是算法&#xff0c;那么宋老师当时一定是在进行算法表演了&#xff1f; (2)百度AI&#xff1a;为解决某一…

【多模态融合】SuperFusion 激光雷达与相机多层次融合 远距离高清地图预测 ICRA 2024

前言 本文介绍激光雷达与相机进行多层次融合&#xff0c;包括数据级融合、特征级融合和BEV级融合。 融合后的BEV特征可以支持不同的任务头&#xff0c;包括语义分割、实例编码和方向预测&#xff0c;最后进行后处理生成高清地图预测&#xff0c;它是来自ICRA 2024的。 会讲解…

【ZZULIOJ】1001: 整数a+b(Java)

目录 题目描述 输入 输出 样例输入 样例输出 code 题目描述 计算两个整数的和。 输入 输入两个整数&#xff0c;两个整数用空格隔开。 输出 输出为两个整数的和&#xff0c;单独占一行。 样例输入 1 1 样例输出 2 code import java.util.*;public class M…

集合系列(十五) -CopyOnWriteArrayList详解

一、摘要 在介绍 CopyOnWriteArrayList 之前&#xff0c;我们一起先来看看如下方法执行结果&#xff0c;代码内容如下&#xff1a; public static void main(String[] args) {List<String> list new ArrayList<String>();list.add("1");list.add(&quo…

[BT]BUUCTF刷题第8天(3.26)

第8天 Web [CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列&#xff0c;这里先尝试1 返回&#xff1a;你好&#xff0c;glzjin想要一个女朋友。 再尝试1&#xff0c;返回bool(false) 到这里就感觉是布尔盲注的题目类型了&#xff08;虽然我没…

Java方法返回类型详解

文章目录 在Java编程语言中&#xff0c;方法&#xff08;函数&#xff09;的返回类型可以非常多样&#xff0c;主要包括以下几类&#xff1a; 1.无返回值类型&#xff1a; 使用 void 关键字表示&#xff0c;这类方法不返回任何值&#xff0c;主要用于执行某种操作&#xff0c;如…

EtherCAT转RS232网关在风电领域的应用

开疆智能EtherCAT转RS232网关在风电领域的应用主要体现在以下几个方面&#xff1a; 1.数据采集与传输&#xff1a;在风力发电设备中&#xff0c;传感器和执行器的数据采集和传输至关重要。EtherCAT转RS232网关可以将风力发电设备中的RS232通信协议转换为EtherCAT协议&#xff0…

港澳青年看祖国—千名青年创业家内地暨江港青年交流活动在江举行

为聚焦“一点两地”全新定位&#xff0c;助力纵深推进新阶段粤港澳大湾区建设&#xff0c;3月22日&#xff0c;江门市委统战部、团市委、市青联联合香港深水埗区青年发展及公民教育委员会、愿景基金会、香港青年创业家总商会举办千名青年创业家内地行暨江港青年交流活动&#x…

网络安全威胁

目录 <威胁> 1.网络硬件设备和线路的安全威胁 2.网络系统和软件的安全威胁 3.环境的安全威胁 4.网络管理人员和网络使用人的安全意识威胁 <措施> 1、物理安全措施 2、访问控制措施 3、网络通信安全措施包括建立物理安全的传输媒介&#xff0c;以及对传输数…

【小黑送书—第十四期】>>重磅升级——《Excel函数与公式应用大全》(文末送书)

今天给大家带来AI时代系列书籍&#xff1a;《Excel 2019函数与公式应用大全》全新升级版&#xff0c;Excel Home多位微软全球MVP专家打造&#xff0c;精选Excel Home海量案例&#xff0c;披露Excel专家多年研究成果&#xff0c;让你分分钟搞定海量数据运算&#xff01; 由北京…

出场人物介绍

小张&#xff1a;2年工作经验&#xff0c;工作浮躁&#xff0c;什么都涉猎都不深入。解决问题往往流于表面。bug创造者。 月薪15000 开发的功能客户评价“反人类”&#xff0c;虽然能用就是不好用。 总是抱怨客户需求老变&#xff0c;口头语是“你怎么不早说&#xff1f;” 整天…

Redis 教程系列之Redis PHP 使用 Redis(十二)

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前&#xff0c; 我们需要确保已经安装了 redis 服务及 PHP redis 驱动&#xff0c;且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动&#xff1a;下载地址为:https://github.com/phpredis/phpredis/releases。 P…

fs.1.10 ON CENTOS7 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs1.10版本的流程记录。 环境 docker engine&#xff1a;Version 24.0.6 centos docker&#xff1a;7 freeswitch&#xff1a;v1.10.7 手动模式 centos准备 docker hub拉取centos镜像。…