51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
# 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
|