algos_and_structures/leetcode/stacks/0155_min_stack.py

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