2016年12月4日 星期日

[LeetCode] 155. Min Stack

轉自LeetCode

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>

這題要用兩個 stack 來實做

一個就是正常的 stack,一個是存放該階段最小值的 stack

分開來處理就可以了

code 如下

class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
if(minStk.empty() || (x <= minStk.top())) {
minStk.push(x);
}
normalStk.push(x);
}
void pop() {
if(normalStk.top() == minStk.top()) {
minStk.pop();
}
normalStk.pop();
}
int top() {
return normalStk.top();
}
int getMin() {
return minStk.top();
}
private:
stack<int> normalStk, minStk;
};
view raw minStack.cpp hosted with ❤ by GitHub

沒有留言:

張貼留言