牛客链接
题目
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路
两个栈,一个正常的存储栈,一个最小栈。
最小栈存储时用传入的值和栈顶元素(最小值)进行比较,如果比栈顶元素小或者相等,则直接入最下栈,否则再次存一次栈顶元素(保持两个栈元素数量相同的同时保证最小栈的栈顶元素是最小值,这样pop的时候可以同时pop的同时保证最小栈的栈顶还是正常存储栈的最小值)
代码实现
import java.util.Stack;
public class Solution {
Stack<Integer> stackTotal = new Stack<Integer>();
Stack<Integer> stackMin = new Stack<Integer>();
public void push(int node) {
stackTotal.push(node);
if(stackMin.empty()) {
stackMin.push(node);
}else{
if(stackMin.peek()>=node) {
stackMin.push(node);
}else stackMin.push(stackMin.peek());
}
}
public void pop() {
stackTotal.pop();
stackMin.pop();
}
public int top() {
return stackTotal.peek();
}
public int min() {
return stackMin.peek();
}
}