思想1:(Java程序员面试宝典)
用空间换时间
两个栈sd存数据,sm存最小值
存入时:
若sm为空,两个直接存数据;
若sm不为空,待存数据与sm的栈顶元素比较,小于时存入,否则不存
出栈:
若sd的栈顶元素和sm的相等,两个都弹出
不等,则只是sd弹出
min():
直接弹出sm的栈顶元素
import java.util.Stack;
public class Solution {
Stack<Integer> sd=new Stack<Integer>();
Stack<Integer> sm=new Stack<Integer>();
public void push(int node) {
sd.push(node);
if(sm.isEmpty()){
sm.push(node);
}
else {
if(node<sm.peek())
sm.push(node);
}
}
public void pop() {
if(sd.isEmpty())
return;
if(sd.peek()==sm.peek()){
sd.pop();
sm.pop();
}
else{
sd.pop();
}
}
public int top() {
return sd.peek();
}
public int min() {
if(sm.isEmpty())
return Integer.MAX_VALUE;
else
return sm.peek();
}
}