队列和栈-020-包含min函数的栈
程序员文章站
2022-07-13 21:29:54
...
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
分析
使用一个辅助栈,用来存储当前栈中的最小值,辅助栈中元素数量和原始栈一样多。每次入栈时,将入栈元素与辅助栈顶元素相比较,如果该元素较小,则将该元素也入辅助栈,否则将辅助栈顶元素再入辅助栈一次。出栈时,辅助栈也要出栈。即保持辅助栈顶元素为当前栈的最小元素值。
代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.dataS = [] #data stack
self.minS = [] #min stack
def push(self, node):
self.dataS.append(node)
if not self.minS:
self.minS.append(node)
else:
if self.minS[-1] > node:
self.minS.append(node)
else:
self.minS.append(self.minS[-1])
def pop(self):
# write code here
self.minS.pop()
return self.dataS.pop()
def min(self):
# write code here
if self.minS:
return self.minS[-1]
推荐阅读
-
Python实现包含min函数的栈
-
python 利用栈和队列模拟递归的过程
-
java用两个栈实现队列的push和pop
-
HDU 1702 ACboy needs your help again!(栈和队列的简单应用)
-
程序员代码面试指南 python实现(第一章 栈和队列 :最大值减去最小值小于或等于num的子数组数量)
-
C语言使用栈和队列实现二进制与十进制的互转(带小数)
-
C++实现用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
-
数据结构-栈和队列的多种实现方法
-
算法之路_17、用数组结构实现大小固定的队列和栈
-
个人学习笔记:c++数组实现的模板队列和栈