Leetcode每日刷题之155.最小栈

news/2025/1/15 19:00:36/

1.题目解析

本题是实现一个栈并且要实现其中的插入、删除、返回栈顶元素、返回最小元素的函数,这里主要的难点就是返回最小元素的函数,如果我们直接遍历,那么时间复杂度就是O(N),但是题目要求我们需要在常数时间也就是O(1)的时间复杂度内实现,那么接下来我们使用一种巧妙地方法来完成本题

 

2.算法原理

这里的主要难点只有在常数时间内找出栈顶最小元素,我们可以创建一个minst栈来存储数据,具体原理是在向st插入数据时判断此时插入的数据与minst中的栈顶元素哪个更小,如果minst的栈顶元素更小则st继续插入,反之则将该较小值插入minst的栈顶即可,注意重复数字也需要插入,因为st删除数据时如果此时st与minst的栈顶元素相同则需要同时删除,最后minst栈顶的元素就是st栈中的最小值,此时直接返回minst.top()即可

 

3.代码展示

class MinStack {
public://构造函数可以直接使用默认构造//这里可以保留也可以直接删除,因为//最后都会执行默认构造函数,析构也是如此MinStack() {}//插入原栈同时判断是否需要插入最小数据的栈void push(int val) {st.push(val);if(minst.empty() || minst.top() >= val){minst.push(val);}}//删除原栈元素同时删除最小栈中对应元素void pop() {if(minst.top() == st.top()){minst.pop();}st.pop();}int top() {return st.top();}int getMin() {return minst.top();}private:stack<int> st;stack<int> minst;
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

 


http://www.ppmy.cn/news/1521824.html

相关文章

Docker必备命令集合,让你轻松驾驭容器化

Docker作为现代化应用程序的部署和管理平台&#xff0c;已经成为开发者和运维工程师的得力工具。但对于新手而言&#xff0c;面对众多的命令和参数&#xff0c;有时会感到困惑。本文将为你总结一组常用的Docker命令&#xff0c;助你快速上手并高效使用这一强大工具。 1. 基础命…

Qt数字化信息通讯调制解调

对于数字化信息通讯调制解调&#xff0c;Qt本身并不直接提供调制解调的功能&#xff0c;但是可以通过Qt的网络编程接口&#xff0c;结合相关的算法和硬件设备来实现。例如&#xff0c;可以通过Qt的信号处理库来实现数字信号的调制和解调算法&#xff0c;或者通过串口通信与外部…

word中怎么快速选中光标之前或之后的全部内容?

在Word中&#xff0c;快速选中光标之后的全部内容的快捷键&#xff1a;Ctrl Shift End&#xff1b; 在Word中&#xff0c;快速选中光标之前的全部内容的快捷键&#xff1a;Ctrl Shift Home。 在Word中&#xff0c;选取的快捷键如下。 一、选定整个文本&#xff1a; 1&#…

微信小程序认证和备案

小程序备案的流程一般包括以下步骤‌&#xff1a; 准备备案所需材料‌&#xff1a;通常需要提供‌营业执照、法人的‌身份证、两个‌手机号和一个邮箱等资料。 ‌1 ‌登录‌微信公众平台‌&#xff1a;作为第一次开发微信小程序的服务商&#xff0c;需要通过微信公众平台申请…

掌握Git分支管理策略:让团队协作更高效

在现代软件开发过程中&#xff0c;版本控制系统&#xff08;VCS&#xff09;是不可或缺的一部分。Git作为目前最流行的分布式版本控制系统之一&#xff0c;为开发者提供了强大的工具集来管理代码变更历史。然而&#xff0c;仅仅掌握Git的基本命令并不足以应对大型项目和团队协作…

中间代码例题

答案&#xff1a;D 知识点&#xff1a; 中间代码是一种简单且含义明确的记号系统&#xff0c;可以有若干形式&#xff0c;它们的共同特征是与机器无关。 最常见的中间代码有&#xff1a;后缀式&#xff0c;语法树&#xff0c;三地址码&#xff0c;四元式 这些往往是数据&am…

HarmonyOS开发实战( Beta5版)Stack组件实现滚动吸顶效果实现案例

介绍 本示例介绍运用Stack组件以构建多层次堆叠的视觉效果。通过绑定Scroll组件的onScroll滚动事件回调函数&#xff0c;精准捕获滚动动作的发生。当滚动时&#xff0c;实时地调节组件的透明度、高度等属性&#xff0c;从而成功实现了嵌套滚动效果、透明度动态变化以及平滑的组…

linux中普通用户免密切换root

在 Linux 中如果要实现不输入密码直接切换到 root 权限&#xff0c;可以通过配置 sudoers 文件来实现。但这种方式有一定安全风险&#xff0c;使用时需谨慎。 以下是具体步骤&#xff1a; 1.以当前有 sudo 权限的用户身份打开终端。 2.使用以下命令编辑 /etc/sudoers 文件&…