Nowcoder java-包含min函数的栈
(题目来自牛客网)
思路
思路:用一个栈dateStack保存数据,用另外一个栈minStack为辅助栈,用来保存依次入栈最小的数
比如:dataStack中依次入栈,5, 4, 3, 8, 10, 11, 12, 1 则minStack依次入栈, 5, 4, 3, no(3), no(3), no(3), no(3), 1
no代表此次不入栈,每次入栈的时候,如果入栈的元素比minStack中的栈顶元素小或等于则入栈,否则不如栈(第一次minStack为空时,入栈)。
当最小元素从栈内被弹出后,同时弹出辅助栈顶的元素。
代码
//思路:用一个栈dateStack保存数据,用另外一个栈minStack保存依次入栈最小的数
//比如,dataStack中依次入栈,5, 4, 3, 8, 10, 11, 12, 1
// 则minStack依次入栈,5, 4, 3,no,no, no, no, 1
//
//no代表此次不如栈
//每次入栈的时候,如果入栈的元素比minStack中的栈顶元素小或等于则入栈,否则不如栈。
import java.util.Stack;
public class Min {
Stack<Integer> dateStack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
dateStack.push(node);
if (minStack.isEmpty()|| node < minStack.peek()){//这里把minStack.isEmpty() 替换成minStack==null 是不可以的
minStack.push(node);
}else {
minStack.push(minStack.peek());
}
}
public void pop() {
dateStack.pop();
minStack.pop();
}
public int top() {
return dateStack.peek();
}
public int min() {
return minStack.peek();
}
}