难度系数 ⭐⭐难在思路
时间限制 C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
题目内容 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
思路 设置两个栈,一个用于正常存储数据的栈stack,另一个用于记录当前栈中所有元素的最小值min。每次stack入栈时,min也入栈,但是在入栈的时候要比较待入栈的值与min顶部的数值,取更小的数值入min栈。stack出栈时,min也同时出栈。
package nowcoder;
import java.util.Stack;
public class No22 {
Stack<Integer> stack = new Stack<>();
Stack<Integer> min = new Stack<>();
public void push(int node){
stack.push(node);
min.push(min.isEmpty() ? node : Math.min(node, min.peek()));
}
public void pop(){
stack.pop();
min.pop();
}
public int top(){
return stack.peek();
}
public int min(){
return min.peek();
}
}