Q:
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.
A:
思想很简单。后来出现memory out of limit, minStack中就没有存多余的最小值。
class MinStack { public: /** initialize your data structure here. */ vector<int> stack; vector<int> minStack; MinStack() { } void push(int x) { stack.push_back(x); if(minStack.empty() || minStack.back() > x) minStack.push_back(x); else minStack.push_back(minStack.back()); } void pop() { stack.pop_back(); minStack.pop_back(); } int top() { return stack.back(); } int getMin() { return minStack.back(); } }; /** * Your MinStack object will be instantiated and called as such: * MinStack* obj = new MinStack(); * obj->push(x); * obj->pop(); * int param_3 = obj->top(); * int param_4 = obj->getMin(); */
Learned:
1; minStack中,重复的最小值也要存。2:即使Stack<Integer>的返回值是一个对象,因此要用.equals()来比较大小
No comments:
Post a Comment