# Min Stack

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

* push(x) -- Push element x onto stack.
* pop() -- Removes the element on top of the stack.
* top() -- Get the top element.
* getMin() -- Retrieve the minimum element in the stack.

**Example:**

```
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> Returns -3.
minStack.pop();
minStack.top();      --> Returns 0.
minStack.getMin();   --> Returns -2.
```

## 题目大意：

设计一个栈，支持在**常数时间**内push，pop，top，和取最小值。

* push(x) -- 元素x压入栈
* pop() -- 弹出栈顶元素
* top() -- 获取栈顶元素
* getMin() -- 获取栈中的最小值

## 解题思路：

“双栈法”，栈stack存储当前的所有元素，minStack存储栈中的最小元素。

在操作元素栈stack的同时，维护最小值栈minStack。

```
class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.node = []
        self.minnode =[]


    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        self.node.append(x)
        if self.minnode:
            x = min(self.minnode[-1], x)
        self.minnode.append(x)


    def pop(self):
        """
        :rtype: void
        """
        self.minnode.pop()
        self.node.pop()



    def top(self):
        """
        :rtype: int
        """
        return self.node[-1]


    def getMin(self):
        """
        :rtype: int
        """
        return self.minnode[-1]



# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rachel2011.gitbook.io/leetcode_cc150/leetcode/min-stack.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
