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.
Java:
1.不用内置stack 建了一个node class代替:
http://blog.csdn.net/ljiabin/article/details/40982153
class MinStack {
Node top = null;
public void push(int x) {
if (top == null) {
top = new Node(x);
top.min = x;
} else {
Node temp = new Node(x);
temp.next = top;
top = temp;
top.min = Math.min(top.next.min, x);
}
}
public void pop() {
top = top.next;
return;
}
public int top() {
return top == null ? 0 : top.val;
}
public int getMin() {
return top == null ? 0 : top.min;
}
}
class Node {
int val;
int min;
Node next;
public Node(int val) {
this.val = val;
}
}
2.内置stack:
http://blog.csdn.net/linhuanmars/article/details/41008731
class MinStack {
ArrayList<Integer> stack = new ArrayList<Integer>();
ArrayList<Integer> minStack = new ArrayList<Integer>();
public void push(int x) {
stack.add(x);
if(minStack.isEmpty() || minStack.get(minStack.size()-1)>=x)
{
minStack.add(x);
}
}
public void pop() {
if(stack.isEmpty())
{
return;
}
int elem = stack.remove(stack.size()-1);
if(!minStack.isEmpty() && elem == minStack.get(minStack.size()-1))
{
minStack.remove(minStack.size()-1);
}
}
public int top() {
if(!stack.isEmpty())
return stack.get(stack.size()-1);
return 0;
}
public int getMin() {
if(!minStack.isEmpty())
return minStack.get(minStack.size()-1);
return 0;
}
}