この質問の最小スタックと従来のスタックの違いは、
一定の時間で最小値を返すことができる関数が必要であることです。
いつでも最小値を返すことができる必要があることを考えると
、要素に入るたびに現在の時間の最小値を計算する必要があります。値
したがって、プッシュするたびに最小値を記録する必要があります。
したがって、最小値を記録するデータ構造は、元のスタックの長さと同じであると考えるのは簡単です。
したがって、リストを作成して、最小値を格納します。
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.realmin = None
self.premin = None
self.stack = []
self.minstack = []
self.stackdict = {}
def push(self, x: int) -> None:
self.stack.append(x)
if self.minstack == []:
self.minstack.append(x)
elif self.minstack[-1] <= x:
self.minstack.append(self.minstack[-1])
else:
self.minstack.append(x)
def pop(self) -> None:
self.minstack.pop(-1)
return self.stack.pop(-1)#-1]#-1)
#thisvalue = self.stack.pop()
#self.stackdict[thisvalue] -= 1
#if self.stackdict[thisvalue] == 0:
# del self.stackdict[thisvalue]
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minstack[-1]