python实现栈,实现push(),pop(),top(),getMin()方法
设计一个栈,该栈可以进行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()方法相关推荐
- 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值
实现栈的push pop 操作,并可以输出栈的最小值 // SatckMin.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include ...
- 29. 栈的push,pop序列
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...
- [WPS笔试题]实现栈的push,pop,max且时间复杂度为O(1)
今天做了一下WPS的笔试题,遇到了一道关于栈的题,觉得挺有意思的,就写篇博客分享一下吧~~ 题目要求:要求实现栈的数据结构,在该类型中实现一个能够得到栈的最大元素的max函数,在该栈中,调用max,p ...
- vue2实现数组push/pop/shift/unshift方法重写
// 获取数组原型 const orginalPrototype = Array.prototype// 备份用来重新操作 const arrPrototype = Object.create(org ...
- 手打配对堆模板(支持push, pop, top, join)
常数较二叉堆小. 采用 new.delete 分配内存,不喜勿喷. 支持任意类型(需定义 operator< 或传入比较器)(需要默认构造函数) 如有错请指正!谢谢! template<t ...
- 汇编自动出栈_汇编自学 (12) 重温进出栈指令PUSH POP 和双循环
微软的masm5.0是8位平台的,6.0是16位平台的,还有其他32位平台的.现在编程一般用32位平台,8位和16位都可以在保护模式运行. 最简单的一个程序 assume cs: codesg cod ...
- javascript学习之数组的使用一 push pop shift unshift 方法
push() 向数组的末尾添加一个或多个元素,返回数组的当前长度 pop() 从数组的末尾删除一个元素,返回删除的元素的值 unshift() 向数组的前端添加一个或多个元素,返回数组的当前长度 sh ...
- 【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目录 一.push / pop 入栈 / 出栈 指令 二.ret / retn 函数调用返回指令 三.set 设置目标值指令 总结 一.push / pop 入栈 / 出栈 指令 push / p ...
- python 最小栈
| 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- ...
最新文章
- 这样玩《TmoLand》包你收益最大化
- View工作原理(一)事件传递原理详解
- 第十章 使用机器学习的建议-机器学习老师板书-斯坦福吴恩达教授
- 从X86向X64迁移的一点心得
- Google Play应用上架流程(含踩坑经验)
- java停车收费系统 源码开源_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
- 内核ko模块strip使用
- HTML5 动态统计表
- 中国抗衰老护肤品市场趋势报告、技术动态创新及市场预测
- ubuntu之修改硬盘名称
- 编程基本功:工作完成之后,还有做好、做精、做美、做顶、做宗等境界
- 拉扎维模拟CMOS集成电路设计python建模工程——利用matplotlib绘制NMOS与PMOS转移特性曲线
- STM8L 低功耗模式说明
- 全能模拟器retroarch+android,全能模拟器 RetroArch Android
- hbase解决海量图片存储
- 【数据分析认知课(一):数据分析思维观】——读后感
- 一张图解释什么是遗传算法_通俗易懂地解释遗传算法
- 防雷接地系统中的浪涌保护器分类选型
- 微信小程序软键盘回车事件
- MQTT下载安装和简单使用