当前位置: 首页 > news >正文

力扣hot100,739每日温度(单调栈)详解

时隔多久又遇到单调栈的题了,上次记得是接雨水的题,简单讲一下单调栈的适用场景和定义。

意义:看名字就知道单调栈是一个栈里面的数据是单调的 。

解决问题:

单调栈主要用于解决需要**快速找到某个元素附近更大或更小的元素**的问题,其核心是通过维护栈内元素的单调性(递增或递减),将时间复杂度优化到 **O(n)**。以下是它的典型应用场景:

 1. 寻找“下一个更大/更小元素
   - 问题类型:给定一个数组,为每个元素找到其右侧/左侧第一个比它大或小的元素。
   - 示例:
     - [下一个更大元素 I](https://leetcode.cn/problems/next-greater-element-i/)
     - [每日温度](https://leetcode.cn/problems/daily-temperatures/)
   - 原理:  
     维护一个单调递减栈(栈顶最小),当新元素比栈顶大时,栈顶元素的下一个更大元素就是当前元素。

 2. 处理区间极值或边界问题
   - 问题类型:找到满足某种极值条件的子数组,或确定某个元素作为极值的最大区间。
   - 示例
     - [柱状图中的最大矩形](https://leetcode.cn/problems/largest-rectangle-in-histogram/):为每个柱子找到左右第一个比它矮的柱子,确定最大宽度。
     -[接雨水](https://leetcode.cn/problems/trapping-rain-water/):通过左右边界计算凹槽的储水量。
   -原理:  
     单调递增栈(栈顶最大)可快速找到左右第一个更小的元素,从而确定当前元素作为区间最小值的边界。

 3. 优化某些动态规划问题
   - 问题类型:当动态规划的状态转移依赖前一个更大或更小的值时,可用单调栈加速查找。
   -示例:  
     [子数组的最小值之和](https://leetcode.cn/problems/sum-of-subarray-minimums/):利用单调栈快速找到每个元素作为最小值的贡献区间。

4. 字符串去重或字典序问题
   问题类型:在字符串中删除重复字符或构造最小/最大字典序序列。
   示例:  
     [去除重复字母](https://leetcode.cn/problems/remove-duplicate-letters/):维护单调递增栈,保留最小字典序。

单调栈的选择规则
单调递增栈(栈底到栈顶递增):用于找下一个更小的元素。
单调递减栈(栈底到栈顶递减):用于找下一个更大的元素。

优势
- 时间复杂度 O(n):每个元素最多入栈和出栈一次。
- 空间复杂度 O(n):最坏情况下栈存储所有元素。

总结
当问题涉及**元素的邻近比较**、**区间极值边界**,或需要**维护序列的某种单调性**时,优先考虑单调栈。其核心是通过舍弃不必要的比较,高效定位目标元素。

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n=temperatures.size();vector<int> answer(n,0);stack<int> m;for(int i=0;i<n;i++){while(!m.empty()){if(temperatures[i]>temperatures[m.top()]){int xx=m.top();answer[xx]=i-xx;m.pop();}else{break;}}m.push(i);}return answer;}
};

这个题就是一个单调递减栈,找右边更小的值 

相关文章:

力扣hot100,739每日温度(单调栈)详解

时隔多久又遇到单调栈的题了&#xff0c;上次记得是接雨水的题&#xff0c;简单讲一下单调栈的适用场景和定义。 意义:看名字就知道单调栈是一个栈里面的数据是单调的 。 解决问题: 单调栈主要用于解决需要**快速找到某个元素附近更大或更小的元素**的问题&#xff0c;其核心…...

怎么检测代理IP延迟?如何选择低延迟代理?

在跨境电商、数据采集以及社交媒体管理等活动中&#xff0c;代理IP的延迟是评估其性能的关键指标之一。高延迟的代理IP可能显著影响任务效率&#xff0c;特别是在需要高并发或大量请求的情况下。本文将介绍几种测试海外代理IP延迟的方法。 一、使用Ping命令测试延迟 Ping命令…...

QEMU 10.0 发布

QEMU 10.0 于 2025 年 4 月 23 日发布。此版本包含 2800 多个提交&#xff0c;来自 211 位作者。以下是一些主要的更新内容&#xff1a; CPU 和主板支持增强 x86 架构&#xff1a;优化了字符串操作指令&#xff0c;显著缩短启动时间。新增了 Intel Clearwater Forest 和 Sierra…...

C++和Java该如何选择?

我真诚的建议你选择C。因为国内Java程序员内卷太严重了&#xff0c;某些公司发布一个Java岗位&#xff0c;立刻就有几百人打招呼&#xff1b;而发布一个C岗位&#xff0c;打招呼的人数就那么十几个。 要知道&#xff0c;无论什么时候&#xff0c;只要你能够学得动C&#xff0c…...

Javase 基础入门 —— 06 final + 单例

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 final 关…...

web 开发中,前端部署更新后,该怎么通知用户刷新

web 开发中&#xff0c;前端部署更新后&#xff0c;该怎么通知用户刷新&#xff1f; 浏览器为什么存在刷新按钮&#xff1f;&#x1f518; 因为需要重新加载js&#xff0c;css&#xff0c;html。但为何需要重新加载这些东西&#xff1f;直白点说这些东西其实就是一个文档&…...

LaTex、pdfLaTex、XeLaTex和luaLaTex的区别和联系

之前一直搞不懂这些乱七八糟的Tex到底有啥区别&#xff0c;不同引擎不同编译器换来换去&#xff0c;查了些资料又问了下AI&#xff0c;总算是搞懂了。 大概是这样&#xff0c;很久以前有人写了个Tex排版引擎&#xff0c;输入一些代码命令&#xff0c;输出dvi文件&#xff08;设…...

深入解析 npm 与 Yarn:Node.js 包管理工具对比与选型指南

在 Node.js 生态中&#xff0c;依赖管理是项目开发的核心环节。npm&#xff08;Node Package Manager&#xff09;和 Yarn 作为两大主流包管理工具&#xff0c;虽目标一致但各有特色。本文将从技术实现、使用场景、生态整合等维度深度对比&#xff0c;助你选择更适合的工具。​…...

PDF嵌入图片

所需依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>9.0.0</version><type>pom</type> </dependency>源码 /*** PDF工具*/ public class PdfUtils {/*** 嵌入图…...

Coding Practice,48天强训(24)

Topic 1&#xff1a;判断是不是平衡二叉树&#xff08;递归&#xff09; 判断是不是平衡二叉树_牛客题霸_牛客网 /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&…...

技术分享 | Oracle-RAC修改IP信息

本文为墨天轮数据库管理服务团队第61期技术分享&#xff0c;内容原创&#xff0c;作者为技术顾问胡振兴&#xff0c;如需转载请联系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明来源。 在生产中有时候会遇到网络变更&#xff0c;Oracle RAC IP信息更换等情况&…...

北京工业大学25计专上岸经验分享

1.个人情况介绍 本科就读于河北双非&#xff0c;专业为计算机科学与技术&#xff0c;四级三次498&#xff0c;六级两次460&#xff0c;拿过几次校级奖学金&#xff0c;竞赛经历有蓝桥杯国三、数学竞赛省二。本科成绩排名靠前&#xff0c;保研保7排8&#xff0c;遗憾选择考研继…...

rabbitmq常用命令

目录 1.查看集群状态 2.查看消息对列的堆积 3.重启mq服务 4.清理mq队列消息 1.查看集群状态 rabbitmqctl cluster_status 2.查看消息对列的堆积 rabbitmqctl list_queues rabbitmqctl list_queues | grep -v 0$ 3.重启mq服务 systemctl status rabbitmq-server.servic…...

Spring Cloud Alibaba 整合 Sentinel:实现微服务高可用防护

一、Sentinel 简介 Sentinel 是阿里巴巴开源的面向分布式服务架构的流量控制组件&#xff0c;主要提供以下核心功能&#xff1a; 流量控制&#xff1a;针对不同的调用关系&#xff0c;以不同的运行指标&#xff08;如 QPS、线程数、系统负载等&#xff09;为基准&#xff0c;对…...

机器人抓取位姿检测——GRCN训练及测试教程(Pytorch)

机器人抓取位姿检测——GRCN训练及测试教程(Pytorch) 这篇文章主要介绍了2020年IROS提出的一种名为GRCN的检测模型,给出了代码各部分的说明,并给出windows系统下可以直接复现的完整代码,包含Cornell数据集。 模型结构图 github源码地址:https://github.com/skumra/robo…...

《一键式江湖:Docker Compose中间件部署108式》开篇:告别“配置地狱”,从此笑傲云原生武林!》

&#xff08;&#x1f5e1;️江湖险恶&#xff0c;少侠可曾受困&#xff1f;&#xff09; 深夜&#x1f319;&#xff0c;你盯着屏幕泛红的终端报错&#xff0c;第3次从GitHub某个无名仓库扒下残缺的docker-compose.yaml&#xff0c; 却发现&#xff1a; RabbitMQ连不上&#…...

C语言内敛函数

目录 1、内敛函数的定义 2、内敛函数的特点 2.1 减少函数调用开销 2.2 代码膨胀 2.3 编译器决定 2.4 适用于小型函数 3、示例 4、注意事项 在C语言中&#xff0c;内敛函数&#xff08;Inline Function&#xff09;是一种通过编译器优化来减少函数调用开销的机制。它通过…...

DAY8-GDB调试及打桩

GDB打桩 1.类成员函数打桩 // example1.cpp #include <iostream>class Calculator { public:int add(int a, int b) {return a b;} };int main() {Calculator calc;std::cout << "Result: " << calc.add(2, 3) << std::endl;return 0; }(…...

三、UI自动化测试03--操作方法API

目录 一、元素操作⽅法二、浏览器操作⽅法1. Part1: 设置最⼤化/⼤⼩/位置扩展: Web/APP 项⽬⻚⾯布局坐标系示意2. Part2: 后退/前进/刷新3. Part3: 关闭/退出/获取⻚⾯标题和 URL 地址 三、获取元素信息⽅法1. Part1: 获取⼤⼩/⽂本/属性值2. Part2: 判断元素是否可⻅/可⽤/可…...

人工智能—— K-means 聚类算法

目录 摘要 16 K-means 聚类算法 16.1 本章工作任务 16.2 本章技能目标 16.3 本章简介 16.4 编程实战 16.5 本章总结 16.6 本章作业 本章已完结&#xff01;&#xff01;&#xff01; 摘要 本章实现的工作是&#xff1a;首先采用Python语言读取样本数据(学生的语文、数…...

使用XMLSpy校验xml是否合法

# 背景说明 近期大部分地区都在做或将要做数据迁移&#xff0c;基本所有产品的迁移工具底层都依赖了XSD文件对迁移的结构化数据对应XML文件进行初步校验&#xff0c;但有些XSD的问题提示不太容易理解&#xff0c;正好N年前我做XX数据上报时用过XMLSpy可以直接校验每个xml是否合…...

游戏引擎学习第248天:清理数据块显示

启动代码&#xff0c;构建游戏&#xff0c;回顾并为今天的工作做好准备 今天还需要做一些额外的调整。具体来说&#xff0c;我们希望能编辑一些调试值&#xff0c;而这个结构在当前的调试系统中已经有了&#xff0c;所以今天主要是清理一些无关的部分&#xff0c;并进行一些连…...

基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、基于pytest单元测试框架的规则 1.1 模块名&#xff08;即文件名&#xff09;必须以test_开头或者_test结尾 1.2 类名必须以Test开头且不能有init方法 1.3 用…...

腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架

在 3月的时候通过 《腾讯 TDF 即将开源 Kuikly 跨端框架&#xff0c;Kotlin 支持全平台》 我们大致知道了 Kuikly 的基本情况&#xff0c;Kuikly 是一个面向终端技术栈的跨端开发框架&#xff0c;完全基于kotlin语言开发&#xff0c;提供原生的性能和体验。 按照官方的说法&…...

【c++】AVL树模拟实现

简介 AVL树是最先被发明出来的自平衡二叉查找树&#xff0c;在1962由前苏联科学家G. M. Adelson-Velsky和E. M. Landis在论文中发表。AVL树中引入了平衡因子&#xff0c;每一个节点都有一个平衡因子&#xff08;一般是右子树高度 - 左子树高度&#xff09;&#xff1b;AVL树要…...

具身智能模型开发训练技法之仿真平台动捕数据重定向

具身智能大模型的开发与训练高度依赖大量的数据输入&#xff0c;形象地说&#xff0c;如同需要持续的“数据喂养”。只有经过不断地进行数据积累和模型训练&#xff0c;具身智能大模型才能够实现自主感知、自主决策以及自主执行的完整进程。在多样化的数据形态中&#xff0c;真…...

手撕——贪吃蛇小游戏(下)

引言 上一章介绍了实现贪吃蛇小游戏必备的知识点。 这章&#xff0c;让我们一起开启手搓核弹之旅吧。 先附上贪吃蛇代码的git&#xff1a;贪吃蛇小游戏_4_23 Shown_shuai/learn_c - 码云 - 开源中国 (gitee.com) 上一章的窗口&#xff1a; 手撕——贪吃蛇小游戏&#xff0…...

C++ 类与对象(中)—— 默认成员函数与运算符重载的深度解析:构造函数,析构函数,拷贝构造函数,赋值运算符重载,普通取地址重载,const取地址重载

在 C 中&#xff0c;类的默认成员函数是编译器自动生成的重要机制&#xff0c;合理利用这些函数可以简化代码编写&#xff0c;同时避免资源管理错误。本文将从构造函数、析构函数、拷贝构造函数、赋值运算符重载等核心内容展开&#xff0c;结合具体案例深入解析。 一、默认成员…...

【Jupyter 启动时如何指定目录】

你在 Windows 系统下运行 jupyter notebook 时&#xff0c;遇到了 Jupyter Notebook 打开的目录不是你想要的 E:\desktop\yolo-study&#xff0c;而是其他路径。这可能是由于 Jupyter 的默认配置问题 或 启动路径问题 导致的。 &#x1f50d; 原因分析 Jupyter 默认根目录设置错…...

PostSwigger Web 安全学习:CSRF漏洞2

CSRF 漏洞学习网站&#xff1a;What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF 漏洞&#xff1a;SameSite相关绕过 当浏览器访问服务器时&#xff0c;服务器会在 Cookie 中添加 SameSite 属性来告诉浏览器是否在来自其他…...

openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)

​ 相关资料&#xff1a; 1.communication_dsoftbus: 暂无描述 - Gitee.com 2.dsoftbus_tool: OpenHarmony 分布式软总线样例 3.OpenAtom OpenHarmony​ 4.OpenAtom OpenHarmony 编译该demo之前需要大家搭建拉取openharmony源码&#xff0c;搭建开发环境&#xff0c;同时全…...

关于 Web 服务器的五个案例

一、案例题目&#xff1a; 1.多 IP 访问多网站&#xff08;在 RHCE 练习二中的实验二&#xff09; 2.多端口访问多网站 3.多域名访问多网站 4.虚拟目录和用户控制 5.https/443 二、案例实验 2.多端口访问多网站 ① 开始还是先关闭我们的防火墙以及 selinux [rootserve…...

第十二章-PHP文件上传

第十二章-PHP文件上传 一&#xff0c;文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时&#xff0c;浏览器会将表单数据编码为多部分&#xff08;multipart&#xff09;格式。 Boundary分隔符&#xff1a;随机生成的…...

shell脚本部署disu博客

#!/bin/bash #关闭防火墙 systemctl status firewalld &>/dev/null if [ $? -ne 0 ];then systemctl stop firewalld &>/dev/null else echo “firewalld is disabled” fi #关闭selinux filegetenforce if [ “$fine” “Disabled” ];then echo “firewalld…...

NdrpPointerUnmarshallInternal函数分析之pFormatPointee指针的确定

第一部分&#xff1a; 0: kd> p RPCRT4!NdrPointerUnmarshall0x29: 001b:77c46ce4 e8b6f6ffff call RPCRT4!NdrpPointerUnmarshall (77c4639f) 0: kd> t Breakpoint 4 hit RPCRT4!NdrpPointerUnmarshall: 001b:77c4639f 55 push ebp 0: kd> …...

STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)

第 1 章 延时&#xff1a;嵌入式系统的时间控制基石 1.1 延时基础&#xff1a;从概念到硬件实现 1.1.1 什么是延时&#xff1f; 定义&#xff1a;延时是通过软件或硬件手段&#xff0c;使程序执行过程中暂停指定时间&#xff0c;再继续后续操作的技术。本质是对时间的精确或…...

2025 FIC wp

这次比赛计算机和手机大部分题目都比较常规 第一和第四部分有点让人摸不着头脑 比赛的时候第一部分有四个题没出 第四部分基本都没怎么出 现在复盘一下 把我当时做题的心得和获取的新知识记录一下 互联网取证的部分就先学习一下别的师傅 检材 链接&#xff1a;https://pan.bai…...

STM32标准库和HAL库SPI发送数据的区别-即SPI_I2S_SendData()和HAL_SPI_Transmit()互换

1、标准库SPI初始化 这是标准库的SPI初始化配置 2、HAL库SPI初始化 这是HAL库函数的SPI初始化配置 可以看出&#xff0c;基本一直&#xff0c;除了 基本的io口配置区别&#xff0c;其他主要的读写函数不用动的。 3、SPI发送函数_替换对比 /* SPI写入一个字节 */ void SP…...

Cesium 三维场景中通过自定义着色器实现多种特效(纹理、光带、点光源、反射)

整体功能概述 构建一个基于 Cesium 的三维场景&#xff0c;加载三维瓦片集模型&#xff0c;同时提供多种特效&#xff0c;像夜景纹理、上下扫光、点光源以及反射纹理等&#xff0c;利用 dat.gui 库创建交互界面。 代码详解 白膜特效 nightFs.glsl void fragmentMain(Fragm…...

Java学习--HashMap

HaspMap是Java集合框架中最重要、最常用的数据结构之一。其基于哈希表实现了Map接口&#xff0c;在Java1.8的版本中&#xff0c;其采用了“数组链表红黑树”的混合结构&#xff0c;底层代码如下&#xff1a; transient Node<K,V>[] table; // 哈希桶数组 static class N…...

Monorepo、Lerna、Yarn Workspaces、pnpm Workspaces 用法

Monorepo 介绍 Monorepo是一种方案&#xff0c;而非具体的工具。 Monorepo指的是将多个相关的项目或模块放在同一个代码仓库中进行管理的方式。这种方案有以下优点&#xff1a; 方便代码共享&#xff1a;不同项目或模块之间可以方便地共享代码、组件、工具函数等&#xff0c…...

JVM指令手册:深入理解字节码执行机制

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 Java虚拟机&#xff08;JVM&#xff09;作为Java生态的核心执行引擎&#xff0c;其指令系统是理解程序底层运行机制的关键。本手册将系统解析JVM指令集…...

springboot logback 默认加载配置文件顺序

在 Spring Boot 应用中&#xff0c;Logback 默认加载配置文件的顺序遵循特定的规则。以下是详细的加载顺序和优先级说明&#xff1a; 1. 默认配置文件加载顺序 Logback 在 Spring Boot 中会按以下顺序查找并加载配置文件&#xff08;优先级从高到低&#xff09;&#xff1a; l…...

用 Nodemon 解决 npm run serve 频繁重启服务

Nodemon 是一个基于 Node.js 构建的开发工具&#xff0c;专为帮助开发者自动监控项目文件的更改而设计。每当文件发生变更时&#xff0c;Nodemon 会自动重启 Node.js 服务器&#xff0c;无需手动停止并重启。这对于提升开发速度、减少人工操作非常有帮助&#xff0c;尤其适用于…...

WEB安全--社会工程--SET钓鱼网站

1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择&#xff1a; 4、输入钓鱼主机的地址&#xff08;kali&#xff09;和要伪装的网站域名&#xff1a; 5、投放钓鱼网页&#xff08;服务器域名:80&#xff09; 6、获取账号密码...

系统架构师---基于规则的系统架构

引言 在业务规则高度动态且需快速响应的系统中&#xff0c;‌基于规则的系统架构风格&#xff08;Rule-Based System Architecture Style&#xff09;‌提供了一种将业务逻辑与代码解耦的标准化范式。从保险理赔的自动化审核到金融风控的实时拦截&#xff0c;规则引擎已成为企…...

嵌入式软件--stm32 DAY 4 中断系统

1.课后练习 学了这么长时间&#xff0c;现在让我们第一次做练习。 1.1往返流水灯 1.1.1 LED1-LED2-LED3-LED2-LED1循环 &#xff08;1&#xff09;工程准备 复制上一个寄存器实现的工程文档&#xff0c;删减修改我们正要实现的工程。为了区别练习和学习工程&#xff0c;我们…...

android开发制作aosp系统签名文件给普通apk签名使用

platform.pk8和platform.x509.pem复制出来放在同一目录下 将AOSP源码路径下build\target\product\security\platform.pk8和platform.x509.pem复制出来放在同一目录下 新开一个ternimal窗口执行下面命令&#xff0c;生成platform.pem文件 openssl pkcs8 -in platform.pk8 -info…...

AVL树的介绍与学习

目录 1.前言 2.AVL树 3.AVL树的插入 平衡因子的更新 更新停止的条件 旋转 1.前言 在学习了二叉搜索树&#xff0c;set和map之后&#xff0c;我们接下来趁热打铁&#xff0c;继续学习AVL树。 2.AVL树 1.AVL树具有二叉搜索树的性质&#xff0c;但是它的左右子树的高度差不…...

docker部署Mysql8一直密码错误记录

正常流程是这样得&#xff1a; 第一步 #拉镜像 docker pull mysql:8.0 第二步 #运行名为 mysql8 得容器 &#xff0c;MYSQL_ROOT_PASSWORD123456 设置密码 docker run -p 3307:3306 \ --name mysql8 \ -e MYSQL_ROOT_PASSWORD123456 \ -v /docker/mysql8/data:/var/lib/m…...