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

【算法速刷(4/100)】LeetCode —— 155.最小栈

每天写几题,健康每一天

最小栈问题,有许多种办法进行解答,首先需要锁定的条件是要求在实现栈功能之外,要在常数时间内检索最小元素。

一般这种O(1)查找最值都可以用一下方法

  • 哈希表:使用哈希表存储对应栈大小时的栈最小值,在插入删除时都对哈希表进行一个同步操作
  • 小根堆:使用小根堆维护所有数据,每次插入删除时都对堆内对应元素进行一个同步操作
  • 最小栈:使用栈维护对应栈层的最小元素值,插入删除时对栈进行同步操作

以上操作都要求有O(n)的额外空间来记录栈对应层的最小值状态

在这里说一下最小栈的方式

class MinStack {
public:MinStack() {}void push(int val) {if(_minStk.empty() || val <= _minStk.top())_minStk.push(val);_stk.push(val);}void pop() {if(!_minStk.empty() && _stk.top() == _minStk.top())_minStk.pop();_stk.pop();}int top() {return _stk.top();}int getMin() {return _minStk.top();}
private:stack<int> _stk, _minStk;
};

维护一个最小栈,该栈仅在栈为空,或者新入栈元素不大于最小栈的栈顶元素时才会入栈

同理,该栈仅在栈不为空,且出栈元素等于最小栈的栈顶元素时才会出栈

这样可以避免最小栈始终记录每一层的最小元素,即使新增元素后最小值还是不变,可以节省一定的存储空间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java反序列化漏洞实战:原理剖析与复现步骤
  • 与大语言模型Transformer的奇妙旅程
  • 手机三要素接口怎么对接呢?(二)
  • MediaHub中的卡片实现进展汇报
  • 数据结构:链表经典算法OJ题
  • 【Linux】权限理解
  • Python的lambda函数
  • dockerfile之vllm大模型镜像构建
  • Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记
  • Hugging Face下载模型
  • 技术详解:视频美颜SDK与直播美颜插件开发指南
  • XQuery 术语
  • 使用Spring Security实现Java应用的安全管理
  • 视频美颜SDK与直播插件的实现原理及优化方案详解
  • qt-声明
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • leetcode讲解--894. All Possible Full Binary Trees
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Node项目之评分系统(二)- 数据库设计
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Spring Cloud中负载均衡器概览
  • Vue 动态创建 component
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 回顾 Swift 多平台移植进度 #2
  • 讲清楚之javascript作用域
  • 排序(1):冒泡排序
  • 网络应用优化——时延与带宽
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我从编程教室毕业
  • 协程
  • 智能合约Solidity教程-事件和日志(一)
  • Spring第一个helloWorld
  • ​如何防止网络攻击?
  • #13 yum、编译安装与sed命令的使用
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (1)无线电失控保护(二)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (26)4.7 字符函数和字符串函数
  • (35)远程识别(又称无人机识别)(二)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)汇编语言——简单程序
  • (转)scrum常见工具列表
  • (转)我也是一只IT小小鸟
  • ****三次握手和四次挥手
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .NET 8.0 中有哪些新的变化?
  • .NET Framework杂记
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 设计一套高性能的弱事件机制
  • .Net 知识杂记
  • .net/c# memcached 获取所有缓存键(keys)