設計一個棧,使它們在O(1)的時間複雜度內實現push,pop,min的操作,所謂min操作就是得到棧中最小的元素。
分析: 每個元素進棧前綁定當前最小值。
可以添加一個棧、數組,或設計自己的元素類
import java.util.Stack;
public class MyStack {
private Stack<Integer> dataStack;
private Stack<Integer> minStack;
public MyStack(){
dataStack = new Stack<Integer>();
minStack = new Stack<Integer>();
}
void push(int e) {
if(!dataStack.empty()) {
dataStack.push(e);
int minTop = minStack.peek();
if(minTop>e) {
minStack.push(e);
}else {
minStack.push(minTop);
}
}else {
dataStack.push(e);
minStack.push(e);
}
}
Integer pop() {
Integer top=0;
if(!dataStack.empty()) {
top = dataStack.pop();
minStack.pop();
return top;
}
return null;
}
Integer min() {
if(!dataStack.empty()) {
return minStack.peek();
}
return null;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyStack stack = new MyStack();
int[] eles = {3,4,2,5};
for (int i : eles) {
stack.push(i);
}
System.out.println(stack.min());//2
System.out.println(stack.pop());//5
System.out.println(stack.pop());//2
System.out.println(stack.min());//3
stack.push(1);
System.out.println(stack.min());
}
}