0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LeetCode初级算法-设计问题02:最小栈

电子设计 来源:电子设计 作者:电子设计 2020-12-10 22:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

LeetCode初级算法--设计问题02:最小栈

一、引子

这是由LeetCode官方推出的的经典面试题目清单~
这个模块对应的是探索的初级算法~旨在帮助入门算法。我们第一遍刷的是leetcode推荐的题目。

二、题目

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

  • push(x) -- 将元素 x 推入栈中。
  • pop() -- 删除栈顶的元素。
  • top() -- 获取栈顶元素。
  • getMin() -- 检索栈中的最小元素。

示例:

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

1、思路

第一种方法:

用列表模拟栈,push、pop、top和getMin分别对应list.append()、list.pop()、list[-1]和min()操作

第二种方法:

引入minStack列表存放最小值

2、编程实现

第一种方法:

python

class MinStack(object):

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

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        if x is None:
            pass
        else:
            self.l.append(x)
        

    def pop(self):
        """
        :rtype: None
        """
        if self.l is None:
            return 'error'
        else:
            self.l.pop(-1)
        

    def top(self):
        """
        :rtype: int
        """
        if self.l is None:
            return 'error'
        else:
            return self.l[-1]
        

    def getMin(self):
        """
        :rtype: int
        """
        if self.l is None:
            return 'error'
        else:
            return min(self.l)


# 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()

第二种方法:

class MinStack(object):
 
    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []       #存放所有元素
        self.minStack = []#存放每一次压入数据时,栈中的最小值(如果压入数据的值大于栈中的最小值就不需要重复压入最小值,小于或者等于栈中最小值则需要压入)
 
    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        self.stack.append(x)
        if not self.minStack or self.minStack[-1]>=x:
            self.minStack.append(x)
 
    def pop(self):   #移除栈顶元素时,判断是否移除栈中最小值
        """
        :rtype: void
        """
        if self.minStack[-1]==self.stack[-1]:
            del self.minStack[-1]
        self.stack.pop()
 
    def top(self):
        """
        :rtype: int
        """
        return self.stack[-1]
        
    def getMin(self):
        """
        :rtype: int
        """
        return self.minStack[-1]

本文由博客一文多发平台 OpenWrite 发布!

审核编辑 黄昊宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1813

    文章

    49741

    浏览量

    261572
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136236
  • 深度学习
    +关注

    关注

    73

    文章

    5590

    浏览量

    123912
  • leetcode
    +关注

    关注

    0

    文章

    20

    浏览量

    2517
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Stack到底用来干嘛的呢?

    Stack_Size就是大小,0x00000400就是代表有1K(0x400/1024)的大小。 那这个到底用来干嘛的呢? 比如说我们函数的形参、以及函数里定义的局部变量就是存储在里,所以
    发表于 12-01 08:04

    堆和的区别

    一个由C/C 编译的程序占用的内存分为以下几个部分: 区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的。 堆区(heap):一般由
    的头像 发表于 11-27 18:13 907次阅读

    基于E203 RISC-V的音频信号处理系统 -ANC算法简介

    基于FxLMS算法的宽带前馈型主动噪声控制系统框图 其中控制器部分,即是我们算法的核心运算部分,即LMS算法。通过该算法初级声源的处理
    发表于 10-28 07:50

    TPS62A02/TPS62A02A评估模块(EVM)技术解析与应用指南

    Texas Instruments TPS62A02EVM/TPS62A02AEVM评估模块配置用于评估TPS62A02和TPS62A02A的运行。TPS62A
    的头像 发表于 09-12 15:23 655次阅读
    TPS62A<b class='flag-5'>02</b>/TPS62A<b class='flag-5'>02</b>A评估模块(EVM)技术解析与应用指南

    黑芝麻智能端到端全式辅助驾驶系统的应用场景

    黑芝麻智能推出的全新一代端到端全辅助驾驶系统,以武当C1200系列高算力芯片为基石,深度融合自研感知算法,实现从场景感知到车辆控制的完全闭环优化——让辅助驾驶系统学会理解路况的呼吸与脉搏,真正走进“人车共驾”的黄金时代。
    的头像 发表于 09-09 17:19 2115次阅读

    自动驾驶中常提的“全”是个啥?有必要“全”吗?

    和应用,涵盖从底层硬件、感知算法、高精地图、定位与融合,到决策规划、控制执行、软件平台,乃至整车集成与云端服务的完整链条。对于希望在激烈的市场竞争中占据一席之地的车企和科技公司来说,全似乎代表了掌握核心竞争
    的头像 发表于 08-27 09:43 665次阅读
    自动驾驶中常提的“全<b class='flag-5'>栈</b>”是个啥?有必要“全<b class='flag-5'>栈</b>”吗?

    ‌REF02 精密电压参考芯片技术文档总结

    的影响最小。REF02 采用单电源供电,输入范围为 8V 至 40V,电流消耗极低,仅为 1mA,并且由于改进的设计而具有出色的温度稳定性。出色的线路和负载调节、低噪声、低功耗和低成本使 REF02
    的头像 发表于 08-15 11:15 920次阅读
    ‌REF<b class='flag-5'>02</b> 精密电压参考芯片技术文档总结

    RISC-V架构下AI融合算力及其软件实践

    。目前,进迭时空已经取得了显著的进展,成功推出了第一个版本的智算核(带AI融合算力的智算CPU)以及配套的AI软件。软件简介AI算法部署旨在将抽象描述的多框架算法
    的头像 发表于 06-06 17:04 1158次阅读
    RISC-V架构下AI融合算力及其软件<b class='flag-5'>栈</b>实践

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的MDK-Keil下载算法

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的Keil下载算法,这样在我们下载代码时可以一键把数据烧录到EEPROM中。
    的头像 发表于 04-11 11:06 1768次阅读
    基于APM32F407如何制作I2C EEPROM(AT24C<b class='flag-5'>02</b>型号)的MDK-Keil下载<b class='flag-5'>算法</b>

    深入浅出解析低功耗蓝牙协议

    Bluetooth LE协议为什么要分层?怎么理解Bluetooth LE“连接”?如果Bluetooth LE协议只有ATT层没有GATT层会发生什么? 一、协议框架 一般而言,我们把某个
    的头像 发表于 04-09 14:49 1009次阅读
    深入浅出解析低功耗蓝牙协议<b class='flag-5'>栈</b>

    74VHC02;74VHCT02四路2输入或非门规格书

    电子发烧友网站提供《74VHC02;74VHCT02四路2输入或非门规格书.pdf》资料免费下载
    发表于 02-11 16:10 0次下载
    74VHC<b class='flag-5'>02</b>;74VHCT<b class='flag-5'>02</b>四路2输入或非门规格书

    自动驾驶全自研可行吗?

    随着自动驾驶加速落地,全自研模式在高阶智能驾驶技术领域逐渐成为共识,这种模式指的是整车厂从底层硬件、软件算法到系统集成全面自主开发,而非依赖于第三方供应商或Tier 0.5模式(车企与供应商
    的头像 发表于 01-27 10:24 3397次阅读

    MODBUS串口通讯初级入门手册

    初级入门手册介绍
    发表于 01-23 16:24 4次下载

    曙光云开启全智能时代

    近日,“全可信 云中生智”曙光云战略发布会召开。曙光云从首创“城市云”进化到实现“全智能云”,打造“云智、云安、云算、云数”四位一体能力体系,深度赋能千行百业数智化转型升级。
    的头像 发表于 12-19 15:11 911次阅读

    常见的lvs负载均衡算法

    常见的lvs负载均衡算法包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)、基于局部性的最少链接(LBLC)、带复制的LBLC(LBLCR)、目标地址散列(DH)、源地址
    的头像 发表于 12-12 13:50 934次阅读