标签:
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
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.
思路:看起来很简单的一道题,犯了好多错误。用两个stack,一个用来存输入的数字,一个用来存最小的数字。
if(s2.isEmpty()||x<=s2.peek())
{
s2.push(x);
}
peek之前一定要判断empty。
还有一个问题是s1 pop之后要更新s2。如果s2最小值和s1的pop值一样,更新s2.
public class MinStack { Stack<Integer> s1; Stack<Integer> s2; /** initialize your data structure here. */ public MinStack() { s1=new Stack<Integer>(); s2=new Stack<Integer>(); } public void push(int x) { s1.push(x); if(s2.isEmpty()||x<=s2.peek()) { s2.push(x); } } public void pop() { if(s1.peek().equals(s2.peek())) { s2.pop(); } s1.pop(); } public int top() { return s1.peek(); } public int getMin() { return s2.peek(); } } /** * 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(); */
标签:
原文地址:http://www.cnblogs.com/Machelsky/p/5898573.html