示例#1
0
 def testMin(self):
     stack = StackWithMin()
     stack.push(10)
     stack.push(5)
     self.assertEqual(stack.getMin(), 5)
     stack.push(3)
     stack.push(9)
     self.assertEqual(stack.getMin(), 3)
示例#2
0
 def testPushAndPop2(self):
     stack = StackWithMin()
     stack.push(10)
     stack.push(5)
     self.assertEqual(stack.pop(), 5)
     stack.push(9)
     stack.push(3)
     self.assertEqual(stack.pop(), 3)
示例#3
0
class QueueWithMin(object):
    def __init__(self):
        self._push_stack = StackWithMin()
        self._pop_stack = StackWithMin()

    def push(self, x):
        self._push_stack.push(x)

    def pop(self):
        if len(self._pop_stack) == 0:
            self._push_to_pop()
        return self._pop_stack.pop()

    def _push_to_pop(self):
        assert len(self._pop_stack) == 0
        while len(self._push_stack) > 0:
            self._pop_stack.push(self._push_stack.pop())

    def min(self):
        m1 = self._push_stack.min()
        m2 = self._pop_stack.min()
        if m1 is None: 
            return m2
        if m2 is None:
            return m1
        return min(m1, m2)
示例#4
0
 def testPushAndPop(self):
     stack = StackWithMin()
     stack.push(1)
     stack.push(2)
     stack.push(3)
     stack.push(4)
     self.assertEqual(stack.pop(), 4)
     self.assertEqual(stack.pop(), 3)
     self.assertEqual(stack.pop(), 2)
     self.assertEqual(stack.pop(), 1)
示例#5
0
    def test_stack(self):
        stack = StackWithMin()
        stack.push(1)
        self.assertEqual(stack.min(), 1)

        stack.push(2)
        self.assertEqual(stack.min(), 1)

        stack.push(0)
        self.assertEqual(stack.min(), 0)

        stack.push(4)
        self.assertEqual(stack.min(), 0)

        stack.pop()
        self.assertEqual(stack.min(), 0)

        stack.pop()
        self.assertEqual(stack.min(), 1)

        stack.push(-1)
        self.assertEqual(stack.min(), -1)

        stack.pop()
        self.assertEqual(stack.min(), 1)
示例#6
0
 def __init__(self):
     self._push_stack = StackWithMin()
     self._pop_stack = StackWithMin()