设计一个栈,该栈可以进行push、pop、top和在常数时间内检索最小值的操作

  • push(x) – 压一个数到栈顶
  • pop() – 移除栈顶的元素,不返回任何对象
  • top() – 返回栈顶端的元素
  • getMin() – 检索栈中的最小值

方法1:引入minStack列表存放最小值,原生态的min()函数比较花费时间。

class MinStack(object):def __init__(self):self.stack = []  # 存放所有元素self.minStack = []  # 存放每一次压入数据时,栈中的最小值# (如果压入数据的值大于栈中的最小值就不需要重复压入最小值,# 小于或者等于栈中最小值则需要压入)def push(self, x):self.stack.append(x)if not self.minStack or self.minStack[-1] >= x:self.minStack.append(x)def pop(self):  # 移除栈顶元素时,判断是否移除栈中最小值if self.minStack[-1] == self.stack[-1]:del self.minStack[-1]self.stack.pop()def top(self):   #获取栈顶元素return self.stack[-1]def getMin(self): #获取栈中的最小值return self.minStack[-1]def all(self):  #列表栈中所有的元素return self.stack[:]stack = MinStack()
stack.push(-2)
stack.push(0)
stack.push(-3)
stack.push(5)
stack.push(-4)
print('栈中所有元素:',stack.all())
print('最小元素:',stack.getMin())
stack.pop()
print('栈顶元素:',stack.top())
print('最小元素:',stack.getMin())

运行结果:

栈中所有元素: [-2, 0, -3, 5, -4]
最小元素: -4
栈顶元素: 5
最小元素: -3

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

class MinStack(object):def __init__(self):self.stack = []def push(self, x):self.stack.append(x)def pop(self):if self.stack :self.stack.pop()def top(self):if self.stack:return self.stack[-1]def getMin(self):if self.stack:return min(self.stack)stack = MinStack()
stack.push(-2)
stack.push(0)
stack.push(-3)
stack.push(5)
stack.push(-4)
print(stack.getMin())
stack.pop()
print(stack.top())
print(stack.getMin())

运行结果:

-4
5
-3

参考博客:https://blog.csdn.net/qiubingcsdn/article/details/82561331

python实现栈,实现push(),pop(),top(),getMin()方法相关推荐

  1. 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值

    实现栈的push pop 操作,并可以输出栈的最小值 // SatckMin.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include ...

  2. 29. 栈的push,pop序列

    题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...

  3. [WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)

    今天做了一下WPS的笔试题,遇到了一道关于栈的题,觉得挺有意思的,就写篇博客分享一下吧~~ 题目要求:要求实现栈的数据结构,在该类型中实现一个能够得到栈的最大元素的max函数,在该栈中,调用max,p ...

  4. vue2实现数组push/pop/shift/unshift方法重写

    // 获取数组原型 const orginalPrototype = Array.prototype// 备份用来重新操作 const arrPrototype = Object.create(org ...

  5. 手打配对堆模板(支持push, pop, top, join)

    常数较二叉堆小. 采用 new.delete 分配内存,不喜勿喷. 支持任意类型(需定义 operator< 或传入比较器)(需要默认构造函数) 如有错请指正!谢谢! template<t ...

  6. 汇编自动出栈_汇编自学 (12) 重温进出栈指令PUSH POP 和双循环

    微软的masm5.0是8位平台的,6.0是16位平台的,还有其他32位平台的.现在编程一般用32位平台,8位和16位都可以在保护模式运行. 最简单的一个程序 assume cs: codesg cod ...

  7. javascript学习之数组的使用一 push pop shift unshift 方法

    push() 向数组的末尾添加一个或多个元素,返回数组的当前长度 pop() 从数组的末尾删除一个元素,返回删除的元素的值 unshift() 向数组的前端添加一个或多个元素,返回数组的当前长度 sh ...

  8. 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )

    文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...

  9. python 最小栈

    | 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- ...

最新文章

  1. 这样玩《TmoLand》包你收益最大化
  2. View工作原理(一)事件传递原理详解
  3. 第十章 使用机器学习的建议-机器学习老师板书-斯坦福吴恩达教授
  4. 从X86向X64迁移的一点心得
  5. Google Play应用上架流程(含踩坑经验)
  6. java停车收费系统 源码开源_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  7. 内核ko模块strip使用
  8. HTML5 动态统计表
  9. 中国抗衰老护肤品市场趋势报告、技术动态创新及市场预测
  10. ubuntu之修改硬盘名称
  11. 编程基本功:工作完成之后,还有做好、做精、做美、做顶、做宗等境界
  12. 拉扎维模拟CMOS集成电路设计python建模工程——利用matplotlib绘制NMOS与PMOS转移特性曲线
  13. STM8L 低功耗模式说明
  14. 全能模拟器retroarch+android,全能模拟器 RetroArch Android
  15. hbase解决海量图片存储
  16. 【数据分析认知课(一):数据分析思维观】——读后感
  17. 一张图解释什么是遗传算法_通俗易懂地解释遗传算法
  18. 防雷接地系统中的浪涌保护器分类选型
  19. 微信小程序软键盘回车事件
  20. MQTT下载安装和简单使用

热门文章

  1. Solr-4.10.2安装
  2. Shell多线程实现
  3. kafka是什么_终于知道Kafka为什么这么快了!
  4. 200808C阶段一点菜系统界面及运行
  5. Python 深拷贝和浅拷贝的区别
  6. android升级SDK后,XML graphical layout无法预览的解决
  7. Log4Net简单使用
  8. Android程序开发中关于设置全屏无效问题
  9. CodeForces - 1055C Lucky Days(数论)
  10. CodeForces - 1341E Nastya and Unexpected Guest(01bfs)