155. Min Stack
Description:
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
Difficulty:Easy
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.
方法: 双数组
- Time complexity : O ( n ) O\left ( n\right ) O(n)
- Space complexity :
O
(
1
)
O\left ( 1\right )
O(1)
思路:
一个数组存储栈元素,另一个存储最小元素,可以将vector换成两个stack
class MinStack {
private:
vector<int> list;
vector<int> min_list;
public:
/** initialize your data structure here. */
void push(int x) {
list.push_back(x);
if(min_list.size() == 0)
min_list.push_back(x);
else
min_list.push_back(min(min_list.back(), x));
}
void pop() {
if (list.size() == 0) return;
list.pop_back();
min_list.pop_back();
}
int top() {
if (list.size() == 0) return NULL;
return list.back();
}
int getMin() {
if (min_list.size() == 0) return NULL;
return min_list.back();
}
};