# 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