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 发布!

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

    关注

    1789

    文章

    46636

    浏览量

    236985
  • 机器学习
    +关注

    关注

    66

    文章

    8347

    浏览量

    132294
  • 深度学习
    +关注

    关注

    73

    文章

    5463

    浏览量

    120876
  • leetcode
    +关注

    关注

    0

    文章

    20

    浏览量

    2310
收藏 人收藏

    评论

    相关推荐

    RVBacktrace RISC-V极简回溯组件

    RVBacktrace组件简介一个极简的RISC-V回溯组件。功能在需要的地方调用组件提供的唯一API,开始当前环境的回溯支持输出addr2line需要的命令,使用addr2line进行栈回溯支持结合反汇编,回溯信息图表化
    的头像 发表于 09-15 08:12 237次阅读
    RVBacktrace RISC-V极简<b class='flag-5'>栈</b>回溯组件

    明纬电源DETN02-N系列非稳压转换器产品概述

    MEAN WELL明纬电源DETN02系列具体型号:DETN02L-05,DETN02L-12,DETN02L-15,DETN02M-05,
    的头像 发表于 09-12 09:18 376次阅读
    明纬电源DETN<b class='flag-5'>02</b>-N系列非稳压转换器产品概述

    Linux网络协议的实现

    网络协议是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议(Network Stack)负责实现 TCP/IP 协议簇,处理应用程序发起的网络
    的头像 发表于 09-10 09:51 233次阅读
    Linux网络协议<b class='flag-5'>栈</b>的实现

    PA02 PA02A功率运算放大器

    pa02u
    发表于 09-03 14:17 0次下载

    TCP/IP协议的设计与实现_中文

    电子发烧友网站提供《TCP/IP协议的设计与实现_中文.pdf》资料免费下载
    发表于 07-03 11:28 4次下载

    Microchip TCP/IP 协议应用笔记

    电子发烧友网站提供《Microchip TCP/IP 协议应用笔记.pdf》资料免费下载
    发表于 04-17 14:16 1次下载

    物联数据网关是什么?

    物联数据网关就是物联网智能网关。 物联数据网关是物联网架构中的重要组件之一。它是连接物联网设备和云平台的中间设备,负责将物联网设备采集到的数据传输到云平台,并将云平台下发的指令传输给物联网设备
    的头像 发表于 03-29 17:10 270次阅读

    ethernetif_input和tcpip协议线程的作用

    tcpip协议线程是lwIP协议的核心线程,负责处理TCP/IP协议的各种功能,包括TCP连接管理、IP数据报的路由和转发、以及UDP数据包的处理等。
    的头像 发表于 03-20 10:01 1105次阅读

    初级线圈和次级线圈电流关系

    在电磁学和电工学中,初级线圈和次级线圈是经常被用到的概念。初级线圈通常指的是提供电源的线圈,而次级线圈则指的是从初级线圈中导出的线圈。初级线圈和次级线圈之间存在一定的电流关系,本文将详
    的头像 发表于 03-09 09:30 3711次阅读

    四路2输入NOR门74HC02; 74HCT02数据手册

    电子发烧友网站提供《四路2输入NOR门74HC02; 74HCT02数据手册.pdf》资料免费下载
    发表于 02-21 10:57 0次下载
    四路2输入NOR门74HC<b class='flag-5'>02</b>; 74HCT<b class='flag-5'>02</b>数据手册

    四路2输入NOR门74AHC02; 74AHCT02数据手册

    电子发烧友网站提供《四路2输入NOR门74AHC02; 74AHCT02数据手册.pdf》资料免费下载
    发表于 02-19 14:29 0次下载
    四路2输入NOR门74AHC<b class='flag-5'>02</b>; 74AHCT<b class='flag-5'>02</b>数据手册

    堆和的区别和使用注意事项

    堆和是在计算机科学中广泛使用的两种数据结构,它们具有不同的用途和特点。堆和的区别涉及到内存分配、访问方式、数据存储等方面。在使用堆和时,还需要注意一些细节,以确保程序的正确性和效率。本文将详细
    的头像 发表于 01-18 17:24 2008次阅读

    浅谈初级电工必备知识点

    对于初学电工的朋友来说,掌握一些基础且实用的知识点是非常重要的。本文旨在分享初级电工应该掌握的核心知识,帮助新手电工更好地入门和提升技能。
    的头像 发表于 12-26 10:44 994次阅读

    WT588F02KD-24SS语音芯片集成数码管显示驱动算法:声音播放提示的智能升级

    在语音技术的不断发展中,一颗新型的WT588F02KD-24SS语音芯片引起了广泛关注,其特色在于集成了可直接调用的数码管显示驱动算法。本文将深入探讨这一创新技术的好处,以及它对声音播放提示的智能
    的头像 发表于 12-15 08:38 329次阅读
    WT588F<b class='flag-5'>02</b>KD-24SS语音芯片集成数码管显示驱动<b class='flag-5'>算法</b>:声音播放提示的智能升级

    程序内存分区中的堆与

    堆(Heap)与(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与代表不同的含义。一般情况下,有两层含义: (1)程序内存布局场景下,堆
    的头像 发表于 11-11 16:21 715次阅读
    程序内存分区中的堆与<b class='flag-5'>栈</b>