LeetCode [栈] 155.Min Stack(C++和Python实现)

LeetCode --- 155. Min Stack 解题报告 Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Ge... 阅读详情

155 Min Stack [难度:简单] [最小栈] (解法很巧妙)

【题目】

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

Example:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.

【解题C++】

 ”in constant time“要求常数时间,也就是说不能通过遍历来寻得最小值。我一开始是想到了设立两个变量,一个记录最小值,一个记录第二小值。但我的代码漏洞很多,当连续pop两次的数字都是最小值时,那两个变量便都不见了。看了下评论,有人用两个栈的办法,但题目要求Design a stack。于是又找了找博客,看到一种非常巧妙的办法~

设立一个变量minNum,用来记录最小值。进栈时,当该元素≤minNum时,将minNum入栈后再将该元素入栈。这样就真正地保存下来了第二小的变量!出栈时,当出栈元素恰好是最小值时,出栈后此时栈顶元素即是第二小值,这时候更新一下minNum就可以啦!

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> st;
    int minNum;
    MinStack() {
        //初始化成一个很大的值
        minNum = 0x7fffffff;
    }
    
    void push(int x) {
        //当入栈元素≤最小值时
        //一定要加=,因为最小值可以同时有好几个,都要保存下来
        if(x<=minNum)
        {
            //入栈第二小值
            st.push(minNum);
            //更新最小值
            minNum = x;      
        }
        //入栈
        st.push(x);
    }
    
    void pop() {
        int topNum = st.top();
        //如果出栈元素恰好为最小值
        if(topNum==minNum)
        {
            //先出栈
            st.pop();
            //此时的栈顶元素是之前的第二小值,也就是现在的最小值
            minNum = st.top();
        }
        //这里可以是没进入if语句的普通出栈
        //也可以是进入if语句后,出栈掉第二小值的副本元素
        st.pop();
    }
    
    int top() {
        return st.top();
    }
    
    int getMin() {
        return minNum;
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

【解题Python】

Python就偷懒直接用的函数min()

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []

    def push(self, x: int) -> None:
        self.stack.append(x)

    def pop(self) -> None:
        self.stack.pop()

    def top(self) -> int:
        return self.stack[-1]

    def getMin(self) -> int:
        return min(self.stack)


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

相关推荐

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1382

Leetcode刷题笔记——栈篇

栈是一种先进后出的数据结构,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,这里我不做过多介绍,栈的应用和练习算是面试中的高频考点了,接下来看下我们来看一下Leetcode关于栈的常见面试题题型,每道题都附上了简单明了的python解法,大家重点关注算法思想即可。

qq_42898642的博客 1448

shader多图叠加变换

shader Shader "Paint3D/AddTexture" { Properties { _MainTex ("Main Texture", 2D) = "white" {} _MainColor("Main Color", Color)=(1,1,1,1) _AddTex0 ("Texture0", 2D) = "white" {} _AddTex1 ("Texture1", 2D) = "white" {} .

李长江的博客 908

LeetCode刷题 --- 栈

图示,先push1,2,3,然后peek,栈1内元素转到栈2,后面只要栈2不为null,就可以执行pop和peek操作,如果为空,在吧元素从栈1转到栈2 就可以了。每次入栈的时候,判断当前元素和栈顶元素是否配对,如果配对,则弹出,如果不配对,则继续入栈。最后栈元素为空,则true,否则,为false。遇到左括号,则对应的右括号入栈,遇到右括号,则比较与栈顶元素是否一致,一致则出栈,继续,否则直接返回false。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(

qq_43325216的博客 693

极坐标格式算法(PFA)-SAR成像算法系列(六)

SAR成像算法:极坐标格式算法,介绍了算法的基本原理以及实现步骤,包含dechirp处理、RVP补偿,距离插值、方位插值。文后附有代码,可根据自身情况下载。

yjh_2019的博客 1万+

深入解析国家企业征信系统瑞数6vmp算法逆向实战

本文深入解析了国家企业征信系统所采用的双层防护机制,重点聚焦于瑞数6代vmp算法的逆向实战。文章详细拆解了从加速乐521状态码的绕过,到瑞数412挑战的核心算法还原过程,提供了通过动态Hook、日志分析进行算法逆向,并用Python实现自动化请求链的完整技术方案,旨在为安全研究与技术学习提供参考。

yellow的专栏 609

LeetCode栈和队列经典例题

这里有四道关于栈和队列的经典题型

m0_70811813的博客 1196

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2661

LeetCode算法(栈)

今天的练习是栈的相关题目,首先先解释一下什么是栈栈的基本思路是通过数组来存储栈中的元素,并通过栈顶指针指示栈顶元素在数组中的位置。栈具有以下特点:存储结构:使用数组作为底层存储结构,数组的每个元素存储栈中的一个元素;操作受限:栈只能从栈顶插入和删除元素,不支持在栈中间插入和删除元素;先进后出:栈的元素遵循 “先进后出” 的原则,即后插入的元素先被删除;顺序访问:只能从栈顶开始访问栈中的元素,不能从栈底或中间位置访问元素。在开始栈相关的算法前,我们需要一个栈,那么先来手写一个栈结构。

jiangyule的博客 776

网络工程师如何利用Python自动Telnet到N个路由器并执行配置?

telnetlib是Python标准库中的一个模块,专门用于实现Telnet协议。通过telnetlib,我们可以方便地与支持Telnet协议的远程设备进行通信。telnetlib提供了基本的Telnet功能,如连接远程主机、发送命令、读取响应等,使得编写Telnet自动化脚本变得非常简单。文档:可以选择中文:虽然telnetlib的功能相对基础,但对于大多数Telnet操作来说已经足够。通过telnetlib,可以轻松地实现与网络设备的交互,完成自动化配置任务。

网络技术联盟站 298

探索CompletableFuture:高效异步编程的利器

随着现代软件系统的复杂性和用户需求的多样化,异步编程成为了提升系统性能和响应速度的重要手段。在Java领域,CompletableFuture作为Java 8引入的新特性,提供了强大的异步编程能力,极大地简化了多线程和并发任务的处理。本文将深入探讨CompletableFuture的基本功能和使用方法,介绍如何利用其提升程序的并发性能和代码的可维护性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

leetCode-栈类型详解

在刷题的时候遇到一个后缀表达式的题目,然后感觉该题是比较经典的栈应用类型的题目,正好借着该题,给大家聊一聊栈的用法,顺便解决了这道题。众所周知,栈是是一个先进后出的数据结构,利用该特性,在程序的设计中十分常见,如:括号匹配、表达式求值、在递归中的应用等都离不开栈这一数据结构。我下面一一给大家简单说一下。(PS:栈的数据结构我就不再此处赘述,大家可以自行了解)假设表达式中允许包含两种括号 :|直|括号和方括号 ,其嵌套 的顺序任意 即([]())或[([][ ])]等均为正确的格式,[(])或([())或((

zhiyikeji的博客 709

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[leetcode] 155. Min Stack

Description Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) – Push element x onto stack. pop() – Removes the element on top of the stack. top...

Learning from the mistakes 257

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode 155. Min Stack

class MinStack: def __init__(self): """ initialize your data structure here. """ self.min_stk = [] self.stk = [] def push(self, x: int) -...

看清这个世界 106

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【LeetCode】155. Min Stack 最小栈 (Python&C++)

【LeetCode】155. Min Stack 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/min-stack/description/ 题目描述: Design a stack that supports push, pop, top, and retrieving the minimum element

负雪明烛 2657

Leetcode - 155 - Min Stack (easy)

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum ele

xin_rong的博客 240

LeetCode - 解题笔记 - 155 - Min Stack

Solution 1 【参考官方题解】这道题一开始我甚至觉得要自己实现一个栈……然而看了题解之后才发现是不用的。 【难点】需要根据栈内元素的变化动态地维护最小值。 【朴素解法】额外使用一个栈,保存每一次插入数据的最小值结果 【优化解法】【参考】这样才是面试的时候才会被问到的问题吧……使用差值进行维护,争产情况应出现正差值,根据min和差值恢复当前数据;如果出现负差值,即出现了新的最小值,根据min和差值恢复原来的min,当前数据即现在的min 【注意】额外的问题,计算插值可能出现INT_MIN-INT_MA

支锦铭的博客 227

leetcode 155 Min Stack

python: class MinStack: def __init__(self): """ initialize your data structure here. """ self.stack = [] def push(self, x): """ :ty...

MRxjh的博客 291

[LeetCode] 155. Min Stack 最小栈

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- ...

weixin_30764771的博客 102

LeetCode——Min Stack

LeetCode——Min Stack # 155 Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.push(x) – Push element x onto stack. pop() – Removes the element on top

BigSea 355

栈与队列实战:逆波兰表达式与面试高频题解析

栈与队列作为基础数据结构,在算法面试和工程实践中扮演着重要角色。栈的LIFO(后进先出)和队列的FIFO(先进先出)特性,使其成为解决特定问题的理想选择。从原理上看,栈常用于处理具有嵌套结构的问题,如表达式求值、括号匹配等,而队列则适用于广度优先搜索、缓存管理等场景。在技术价值方面,掌握栈与队列的高效应用可以显著提升算法效率,例如使用单调栈将O(n^2)的时间复杂度优化为O(n)。本文以逆波兰表达式和栈序列验证为例,深入解析这些经典问题的解法与边界条件处理,并分享大厂高频考题如最小栈、用队列实现栈等实战技巧

weixin_34007886的博客 356

LeetCode_栈专题

接雨水一.题目二.思路三.代码 一.题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9 提示: n == height.length 1

Acemanindisguise的博客 4363
上一篇: LeetCode [栈] 20.Valid Parentheses (C++和Python实现)
下一篇: LeetCode [栈] 844.Backspace String Compare(C++和Python实现)
DayDreammerⅠ
博客等级 码龄9年 9粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值