diff --git a/leetcode/stacks/0155_min_stack.py b/leetcode/stacks/0155_min_stack.py new file mode 100644 index 0000000..2baca80 --- /dev/null +++ b/leetcode/stacks/0155_min_stack.py @@ -0,0 +1,51 @@ +# Link: https://leetcode.com/problems/min-stack/ +from typing import List +import pytest + + +class MinStack: + def __init__(self): + self._s: List[int] = [] + self._min: List[int] = [] + + def push(self, val: int) -> None: + if len(self._s) == 0: + self._min.append(0) + elif val < self._s[self._min[-1]]: + self._min.append(len(self._s)) + self._s.append(val) + + def pop(self) -> None: + if len(self._s) - 1 == self._min[-1]: + self._min.pop() + self._s.pop() + + def top(self) -> int: + return self._s[-1] + + def getMin(self) -> int: + return self._s[self._min[-1]] + + +class TestSuite: + @pytest.fixture(autouse=True) + def init_tests(self): + self.sol = MinStack() + + def test_solution_1(self): + self.sol.push(1) + self.sol.push(-1) + self.sol.push(2) + self.sol.push(-2) + self.sol.pop() + assert self.sol.getMin() == -1 + + def test_solution_2(self): + breakpoint() + self.sol.push(-2) + self.sol.push(0) + self.sol.push(-1) + assert self.sol.getMin() == -2 + assert self.sol.top() == -1 + self.sol.pop() + assert self.sol.getMin() == -2