标签:ret sem min turn returns 网上 removes top data
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.
public class MinStack { int min = 0; private Stack<Integer> s = new Stack<>(); /** initialize your data structure here. */ public MinStack() { s = new Stack<>(); } public void push(int x) { if (s.isEmpty()) { s.push(x); s.push(x); min = x; }else if (x <= min) { min = x; s.push(min); s.push(x); } else { s.push(min); s.push(x); } } public void pop() { if (min == (s.pop())) { s.pop(); if (!s.isEmpty()) { int temp = s.pop(); min = s.pop(); s.push(min); s.push(temp); } } else { min = s.pop(); } } public int top() { return s.peek(); } public int getMin() { if (!s.isEmpty()) { return min; } return 0; } }
这个简洁点, 网上的, 自己的那个就不错
public class MinStack { Stack<Integer> stack; int min=Integer.MAX_VALUE;; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); } public void push(int x) { if(x<=min) { stack.push(min); min = x; } stack.push(x); } public void pop() { if(stack.pop() == min) min = stack.pop(); } public int top() { return stack.peek(); } public int getMin() { return min; } }
标签:ret sem min turn returns 网上 removes top data
原文地址:http://www.cnblogs.com/apanda009/p/7295429.html