题目:
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.
题解:
使用两个栈,一个数据栈,一个用来存储每一步的最小值
Solution 1
class MinStack { public: MinStack() { } void push(int x) { s1.push(x); if(s2.empty() || s2.top() >= x) s2.push(x); } void pop() { if(s1.top() == s2.top()){ s2.pop(); } s1.pop(); } int top() { return s1.top(); } int getMin() { return s2.top(); } stack<int> s1, s2; };
只用一个栈,不过需要额外的整形变量记录最小值。
Solution 2
class MinStack { public: /** initialize your data structure here. */ MinStack() { } void push(int x) { if(x <= min_val){ s.push(min_val); min_val = x; } s.push(x); } void pop() { if(s.top() == min_val){ s.pop(); min_val = s.top(); } s.pop(); } int top() { return s.top(); } int getMin() { return min_val; } int min_val = INT_MAX; stack<int> s; };