leetcode刷题笔记|单调栈

ops/2025/3/17 2:31:11/
  • 什么时候用单调栈?
    • 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。
  • 本质:单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。
  • 如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。

每日温度
739.每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

  • 输入: temperatures = [73,74,75,71,69,72,76,73]
  • 输出: [1,1,4,2,1,1,0,0]
  • 思路:维护一个单调栈,栈中存放元素下标。从栈头到栈尾是递增的(栈头最小)(先入栈的元素更大:每来一个元素(即新来的元素是右边的元素),和栈头比较,如果大,就说明栈头元素找到了比他大的右边的元素,就把栈头pop出来)
  • 见视频讲解:卡哥视频讲解

class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0]*len(temperatures)stack = [0]for i in range(1,len(temperatures)):# 情况一和情况二if temperatures[i]<=temperatures[stack[-1]]:stack.append(i)# 情况三else:while len(stack) != 0 and temperatures[i]>temperatures[stack[-1]]:answer[stack[-1]]=i-stack[-1]stack.pop()stack.append(i)return answer# 精简版本:
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0]*len(temperatures)stack = []for i in range(len(temperatures)):while len(stack)>0 and temperatures[i] > temperatures[stack[-1]]:answer[stack[-1]] = i - stack[-1]stack.pop()stack.append(i)return answer```

http://www.ppmy.cn/ops/166377.html

相关文章

贝叶斯分层回归(Bayesian Hierarchical Regression)是一种基于贝叶斯统计理论的数据分析方法

贝叶斯分层回归&#xff08;Bayesian Hierarchical Regression&#xff09;是一种基于贝叶斯统计理论的数据分析方法&#xff0c;它在多个领域都有广泛应用。以下是对其原理、模型构建步骤和优势的介绍&#xff1a; 原理 贝叶斯分层回归将传统回归模型中的参数视为随机变量&a…

MySQL 企业版 TDE加密后 测试和问题汇总

一、测试keyring file 1.1 当keyring file文件丢失或者被篡改 结论&#xff1a;不影响当前正在运行的数据库&#xff0c;但是在重启服务后会启动失败出现报错。 tail -n 100 /var/log/mysql/error.log 报错信息如下&#xff1a; 2025-03-12T08:04:54.668847Z 1 [ERROR] [M…

介绍HTTP协议基本结构与Linux中基本实现HTTPServer

介绍HTTP协议基本结构与基本实现HTTPServer HTTP协议 前面已经了解了协议的重要性并且已经定义了属于我们自己的协议&#xff0c;但是在网络中&#xff0c;已经有一些成熟的协议&#xff0c;最常用的就是HTTP协议 在互联网世界中&#xff0c;HTTP&#xff08;HyperText Tran…

如何在androidstudio开发环境中查看sqlite数据库(按新版本Android Studio Giraffe提供详细步骤和操作说明,附截图,代码)

如何在androidstudio开发环境中查看sqlite数据库&#xff08;按新版本Android Studio Giraffe提供详细步骤和操作说明&#xff0c;附截图&#xff0c;代码&#xff09;鹿溪IT工作室提供_android studio查看数据库-CSDN博客

简单以太网配置

display arp //查看路由器mac地址 交换机配置命令&#xff1a; system-view // 从用户视图进入系统视图 dis mac-address //查看mac地址表 路由器配置命令: system-view // 从用户视图进入系统视图 int GigabitEthernet 0/0/0 //进入G口 0/0/0 进入之后配置网关: ip addre…

贪心算法和遗传算法优劣对比——c#

项目背景&#xff1a;某钢管厂的钢筋原材料为 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 种规格 &#xff0c;现用贪心算法和遗传算法两种算法进行计算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…

设计模式-工厂模式、策略模式、代理模式、责任链模式

目录 1 工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 1.3 抽象工厂模式 1.4 工厂模式适用的场合 1.5 三种工厂模式的使用选择 2 策略模式 2.1 定义 2.2 结构 3 代理模式 3.1 啥是代理模式 3.2 为啥要用代理模式 3.3 代理模式分类 3.3.1 静态代理 3.3.2 动态代理…

Pyecharts 输出到 html 白屏 | 解决方案来

方法一&#xff1a; 先去文件夹里面打开你的html文件&#xff0c;有时候直接在edge浏览器打不开 跑去文件夹中打开 方法二&#xff1a; 尝试以上还不行之后&#xff0c; 1.在同级目录下创建文件&#xff1a;echarts.min.js &#xff08;一定要右键创建&#xff09; 2.创建成…