Changed method to matrix that keeps track of min value at all times
This commit is contained in:
parent
18baee9bd5
commit
85db2d73d0
@ -1,53 +1,38 @@
|
|||||||
class MinStack(object):
|
class MinStack(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.st=[] #stack
|
self.stack = []
|
||||||
self.min=None #min element
|
|
||||||
|
|
||||||
def push(self, val):
|
def push(self, val):
|
||||||
"""
|
if not self.stack:
|
||||||
:type val: int
|
self.stack.append((val, val))
|
||||||
:rtype: None
|
|
||||||
"""
|
|
||||||
if len(self.st)==0:
|
|
||||||
self.st.append(val)
|
|
||||||
self.min=val
|
|
||||||
else:
|
else:
|
||||||
if val>=self.min:
|
mn = min(self.stack[-1][1], val)
|
||||||
self.st.append(val)
|
self.stack.append((val, mn))
|
||||||
else:
|
print(self.stack)
|
||||||
self.st.append(2*val-self.min)
|
|
||||||
self.min=val
|
|
||||||
|
|
||||||
def pop(self):
|
def pop(self):
|
||||||
"""
|
if self.stack:
|
||||||
:rtype: None
|
print(self.stack)
|
||||||
"""
|
self.stack.pop()
|
||||||
x=self.st.pop()
|
|
||||||
if x<self.min:
|
|
||||||
self.min=2*self.min-x
|
|
||||||
|
|
||||||
def top(self):
|
def top(self):
|
||||||
"""
|
if self.stack:
|
||||||
:rtype: int
|
print(self.stack)
|
||||||
"""
|
return self.stack[-1][0]
|
||||||
x=self.st[-1]
|
return 0
|
||||||
if x>=self.min:
|
|
||||||
return x
|
|
||||||
return self.min
|
|
||||||
|
|
||||||
|
|
||||||
def getMin(self):
|
def getMin(self):
|
||||||
"""
|
if self.stack:
|
||||||
:rtype: int
|
print(self.stack)
|
||||||
"""
|
return self.stack[-1][1]
|
||||||
return self.min
|
return 0
|
||||||
|
|
||||||
|
|
||||||
minStack = MinStack()
|
minStack = MinStack()
|
||||||
minStack.push(-2)
|
minStack.push(-2)
|
||||||
minStack.push(0)
|
minStack.push(0)
|
||||||
minStack.push(-3)
|
minStack.push(-3)
|
||||||
|
minStack.push(4)
|
||||||
minStack.getMin() # return -3
|
minStack.getMin() # return -3
|
||||||
minStack.pop()
|
minStack.pop()
|
||||||
minStack.top() # return 0
|
minStack.top() # return 0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user