定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路:把每次的最小元素保存起来放到另外一个辅助栈里。
如果每次都能把最小元素压入辅助栈,那么就能保证辅助栈栈顶一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶就是下一个最小值。
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
public void push(int node) {
stack.push(node);
if(stack2.isEmpty()){
stack2.push(node);
}else if(node<=stack2.peek()){
stack2.push(node);
}
}
public void pop() {
if(stack.peek()==stack2.peek()&&!stack2.isEmpty()){
stack2.pop();
}
stack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return stack2.peek();
}
}