12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- class MinStack:
-
- def __init__(self):
- self.stack = []
- self.minEl = None
-
- def push(self, x: int) -> None:
- node = Node(x)
- if self.minEl is None or node.value <= self.minEl.value:
- node.lastMin = self.minEl
- self.minEl = node
- self.stack.append(node)
-
- def pop(self) -> None:
- if len(self.stack) > 0:
- ret = self.stack[len(self.stack) - 1]
- if ret.value == self.minEl.value:
- self.minEl = self.minEl.lastMin
- self.stack = self.stack[0:len(self.stack) - 1]
- return ret.value
- return None
-
- def top(self) -> int:
- if len(self.stack) > 0:
- return self.stack[len(self.stack) - 1].value
- return None
-
- def getMin(self) -> int:
- return self.minEl.value
-
- def __str__(self):
- str_result = ""
- for x in self.stack:
- str_result += "\n"
- str_result += str(x)
- return str_result
-
- class Node:
- def __init__(self, x, lastMin = None):
- self.value = x
- self.lastMin = lastMin
-
- def __str__(self):
- return f"Value: {str(self.value)} Last Min: {str(self.lastMin)}"
-
- # Your MinStack object will be instantiated and called as such:
- values = []
- obj = MinStack()
- obj.push(-2)
- obj.push(0)
- obj.push(-3)
- values.append(obj.getMin())
- values.append(obj.pop())
- values.append(obj.top())
- values.append(obj.getMin())
-
- print("Expected: [-3, -3, 0, -2]")
- print("Got:", values)
|