你能帮我理解这行代码中发生了什么吗?
def push(self, x):
self.stack.append(x)
if len(self.minStack):
if x < self.minStack[-1][0]:
self.minStack.append([x, 1])
elif x == self.minStack[-1][0]:
self.minStack[-1][1] += 1
else:
self.minStack.append([x, 1])
取自此代码的行:
class MinStack2:
def __init__(self):
self.stack, self.minStack = [], []
# @param x, an integer
# @return an integer
def push(self, x):
self.stack.append(x)
if len(self.minStack):
if x < self.minStack[-1][0]:
self.minStack.append([x, 1])
elif x == self.minStack[-1][0]:
self.minStack[-1][1] += 1
else:
self.minStack.append([x, 1])
您也可以在此GitHub帐户中找到它:https://github.com/kamyu104/LeetCode/blob/master/Python/min-stack.py
提前谢谢
如果您有任何误解,请不要将其标记下来。请留下反馈。这是一个学习的平台,我觉得在没有解释的情况下标记帖子是非常没有受过教育的
答案 0 :(得分:2)
每当你push
进入堆栈时,你还要检查这个项目是否小于先前的最小值(保留在minStack
之上),以及该项目的数量是多少在堆栈中。
如果项目较小,则将其(计数为1)推到minStack
。如果它相同,则将该项目的计数增加1。
每次弹出一个项目时,如果它是堆栈中的最小项目(即== minStack[-1][0]
),则减少最小项目的计数。如果该计数变为零,则将项目弹出minStack
。现在,堆栈中最小的项目是在添加第一个较小项目之前的任何项目。这是因为为了丢弃最小项目的第一个实例,我们必须首先在它上面弹出所有内容,基本上将堆栈滚回到添加最小元素的时间点。
PS:当你发现自己编写自己的堆栈实现时,要知道任何没有返回它pop
的项目的堆栈都表现得非常奇怪。