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

LeetCode 算法:最小栈 c++

原题链接🔗:最小栈
难度:中等⭐️⭐️

题目

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

提示:

  • -231 <= val <= 231 - 1
  • pop、top 和 getMin 操作总是在 非空栈 上调用
  • push, pop, top, and getMin最多被调用 3 * 104 次

最小栈

最小栈是一种特殊的栈数据结构,它在普通的栈功能基础上增加了一个额外的功能:能够在常数时间内返回当前栈的最小元素。最小栈通常用于那些需要频繁查询当前最小值的场景,比如在遍历数组或列表时找到所有子数组的最小值。

最小栈的实现一般有两种方法:

  1. 辅助栈:使用一个辅助栈来存储当前栈中元素的最小值。每次压栈操作时,将当前元素与辅助栈的栈顶元素进行比较,并将较小的值压入辅助栈。这样,辅助栈的栈顶元素始终是当前栈中所有元素的最小值。

  2. 排序数组:在每次压栈操作后,将新元素插入到一个数组中,并保持数组的有序性。这样,数组的第一个元素就是当前栈的最小值。这种方法的时间复杂度较高,因为插入操作可能需要O(n)的时间。

最小栈的典型操作包括:

  • push(x):将元素x压入栈中。
  • pop():弹出栈顶元素。
  • top():返回栈顶元素。
  • getMin():返回当前栈的最小元素。

最小栈在实现上需要考虑空间和时间效率,通常辅助栈的方法在时间效率上更有优势。

题解

  1. 解题思路:

LeetCode 上的 “最小栈”(Min Stack)问题要求设计一个特殊的栈,它在进行常规栈操作的同时,还需要支持在常数时间内获取栈的最小元素。

  • 问题描述

    • 设计一个支持 push、pop 和 top 操作的栈,并且在常数时间内能够获取到栈的最小元素。
  • 解题思路

    • 使用两个栈:创建两个栈,一个用于存储所有元素(mainStack),另一个用于存储当前的最小元素(minStack)。
    • 初始化:minStack 初始化为空。
    • Push 操作:
      • 将元素压入 mainStack。
      • 检查 minStack 是否为空,或者新元素小于等于 minStack 的栈顶元素。如果是,将该元素也压入 minStack。
    • Pop 操作:
      • 弹出 mainStack 的栈顶元素。
      • 如果该元素等于 minStack 的栈顶元素,那么 minStack 也弹出栈顶元素。
    • Top 操作:
      • 返回 mainStack 的栈顶元素。
    • GetMin 操作:
      • 返回 minStack 的栈顶元素,即当前最小元素。
  1. c++ demo:
#include <iostream>
#include <stack>class MinStack {
private:std::stack<int> stack;std::stack<int> minStack;public:/** initialize your data structure here. */MinStack() {}void push(int x) {stack.push(x);if (minStack.empty() || x <= minStack.top()) {minStack.push(x);}}void pop() {if (!stack.empty()) {int topElement = stack.top();stack.pop();if (topElement == minStack.top()) {minStack.pop();}}}int top() {if (!stack.empty()) {return stack.top();}throw std::runtime_error("Stack is empty");}int getMin() {if (!minStack.empty()) {return minStack.top();}throw std::runtime_error("Stack is empty");}
};int main() {MinStack minStack;minStack.push(-2);minStack.push(0);minStack.push(-3);std::cout << "Minimum: " << minStack.getMin() << std::endl; // 返回 -3minStack.pop();std::cout << "Top: " << minStack.top() << std::endl;         // 返回 0std::cout << "Minimum: " << minStack.getMin() << std::endl; // 返回 -2return 0;
}
  • 输出结果:

Minimum: -3
Top: 0
Minimum: -2

  1. 代码仓库地址:getMin

相关文章:

LeetCode 算法:最小栈 c++

原题链接&#x1f517;&#xff1a;最小栈 难度&#xff1a;中等⭐️⭐️ 题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推…...

【解压既玩】PS3模拟器v0.0.32+战神3+战神升天+各存档 整合包 ,完美不死机,没有BUG,旷世神作,强力推荐

战神3是圣莫尼卡公司的大作&#xff0c;PS3 上必玩的游戏之一。 本文收集了战神3和升天两作&#xff0c;附存档&#xff0c;完美不死机&#xff0c;没有BUG&#xff0c;强烈推荐。 解压即玩。 立即下载&#xff1a;【chumenx.com】【解压既玩】PS3模拟器v0.0.32战神3战神升天…...

bootstrap- X-editable 行内编辑

前面不要忘记引入editable {field: weigh, title: __(Weigh),editable: {type: text,url: "api/cat/editWeigh",validate: function (v) {if($.trim(v) ) return 值不能为空;if(!$.isNumeric(v)) return 值只能为数字;if(v<0 || v%1!0) return 值必需为正整数;}…...

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…...

Oracle一对多(一主多备)的DG环境如何进行switchover切换?

本文主要分享Oracle一对多(一主多备)的DG环境的switchover切换&#xff0c;如何进行主从切换&#xff0c;切换后怎么恢复正常同步&#xff1f; 1、环境说明 本文的环境为一主两备&#xff0c;数据库版本为11.2.0.4&#xff0c;主要信息如下&#xff1a; 数据库IPdb_unique_n…...

【浏览器插件】Chrome扩展V3版本

前言&#xff1a;Chrome从2022年6月开始&#xff0c;新发布插件只接受V3版。2024年V2版已从应用商店下架。 浏览器扩展插件开发API文档 chrome官网&#xff08;要翻墙&#xff09;&#xff1a; https://developer.chrome.com/docs/extensions/mv3 MDN中文&#xff1a;https:/…...

编码器信号干扰问题、编码器选型

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、屏蔽技术1.静电屏蔽:2.低频磁屏蔽:3.电磁屏蔽:4.减少“天线” 二、增量编码器的信号选择三、信号电缆选择四、…...

Unity入门5——材质

创建材质 点击Assets → Create → Material&#xff0c;得到一个默认材质球的副本。 使用材质 直接把材质球拖拽到物体上&#xff0c;或设置mesh renderer组件下的Materials 数组中第一个元素...

C的温故而知新:存储类别、链接和内存管理(C Primer Plus第十二章)

存储类别、链接和内存管理 这一章主要涉及到的是一些偏概念的东西&#xff0c;基本上偏向于自己去理解这部分内容。很好地理解这一章可以更好地控制程序&#xff0c;合理的利用内存存储数据。 C语言提供了多种不同的模型或存储类别在内存中存储数据。作用域有块作用域、函数作…...

SpringBoot统一功能处理——统一数据返回格式

目录 一、简单使用 二、存在的问题描述 三、优点 一、简单使用 统一的数据返回格式使用 ControllerAdvice 和 ResponseBodyAdvice 的方式实现 ControllerAdvice 表示控制器通知类。 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口&#xff0c;并在类上添加 …...

Milvus 实践(2) --- 2.4.x 安装,脚本分析,数据存储解析

目录 背景 Milvus2.4.x安装脚本分析 etcd组件 container_name image 参数 注意问题 environment volumes 实体化 command 参数 注意事项 healthcheck 参数 作用 下载 minio组件 container_name image 参数 注意事项 environment 参数 ports 参数 注…...

【蛋疼c++】千万别用std::wifstream读取Unicode UTF16文件

上当了。 最近程序要和 Jscript / activex 脚本通信。 ActiveX这玩意&#xff0c;导出文件&#xff0c;如果是UTF8导出&#xff0c;会出现莫名异常&#xff1a;写一半直接退出。或许是系统语言设置的问题。 但是切换为utf16&#xff08;unicode&#xff09;导出就没有问题&a…...

[算法] 第二集 二叉树中的深度搜索

深度优先遍历&#xff08;DFS&#xff0c;全称为 Depth First Traversal&#xff09;&#xff0c;是我们树或者图这样的数据结构中常⽤的 ⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支&#xff0c;直到⼀条路径上的所有节点都被遍历 完毕&#xff0c;然后再回溯到上…...

放弃使用外键时,sequelize 应该怎么使用?

在使用 Sequelize 时&#xff0c;如果想放弃使用外键&#xff0c;但仍然希望在模型之间建立关联&#xff0c;可以通过设置 constraints 选项为 false 来实现。这允许你定义模型之间的关系&#xff0c;而不在数据库中创建外键约束。以下是具体的实现步骤&#xff1a; 定义没有外…...

Microsoft GraphRAG 输出的配置信息

Microsoft GraphRAG 输出的配置信息 {"llm": {"api_key": "REDACTED, length 9","type": "oci_genai_chat","model": "cohere.command-r-plus","max_tokens": 4000,"temperature"…...

怎么判断张量的维度(形状(shape)),即如何定义行数、列数和深度的?

举一个三维张量吧 # 3行4列深度为2 const3 tf.constant([[[1,2],[3,4],[5,6],[7,8]],[[11, 12], [13, 14], [15, 16], [17, 18]],[[21, 22], [23, 24], [25, 26], [27, 28]] ],tf.float16) shape (3,4,2)--借鉴博主奶油松果的图和代码 分析形状 (3, 4, 2) 最外层的括号&…...

AI入门指南(二):算法、训练、模型、大模型是什么?

文章目录 一、前言二、算法是什么&#xff1f;概念实际应用 三、训练是什么&#xff1f;概念实际应用 四、模型是什么&#xff1f;概念实际应用小结 五、大模型是什么&#xff1f;概念大模型和小模型有什么区别&#xff1f;大模型分类实际应用 六、总结七、参考资料 一、前言 …...

CSS已访问链接的隐私保护

摘抄自&#xff1a;《CSS权威指南 第四版》 有超过十年的时间&#xff0c;已访问的链接可以使用任何可用的CSS属性装饰&#xff0c;与未访问链接没有差别。 然而&#xff0c;大约在2005年&#xff0c;有几个人通过示例揭露&#xff0c;通过视觉样式和简单的DOM脚本就可以判断用…...

代码练习12-排序链表

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 归并排序算法核心步骤 归并排序核心步骤如下&#xff1a; 把长度为n的要排序的序列&#xff0c;分成两个长度为n/2的子序列&#xff1b;对这两个子序列&#xff0c;分别采用归并排序&#xff1b…...

Linux 内核源码分析---套接字

套接字通信 ISO 设计一种参考模型&#xff0c;定义组成网络的各个层&#xff0c;该模型由7层组成&#xff0c;称为OSI&#xff08;开放 系统互连&#xff09;模型如下&#xff1a; 应用层&#xff1a;网络服务与最终用户的接口&#xff1b; 表示层&#xff1a;数据的表示、安…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...