/**
* 实现一个特殊的栈,在基本功能上实现返回栈中最小元素的功能
* 1.push,pop,getMin的时间复杂度为O(1)
* 2.可以使用现有的栈结构
* 操作:
* 使用两个栈,一个最小栈,一个数据栈
*/
public class TheMinNumberInStack {
private final Stack<Integer> dataStack;
private final Stack<Integer> minStack;
public TheMinNumberInStack() {
this.dataStack = new Stack<>();
this.minStack = new Stack<>();
}
public static void main(String[] args) {
TheMinNumberInStack stack = new TheMinNumberInStack();
stack.push(5);
stack.push(3);
stack.push(7);
System.out.println(stack.getMin());
stack.pop();
System.out.println(stack.getMin());
stack.pop();
}
public void push(int val){
if(dataStack.empty() && minStack.empty()){
minStack.push(val);
}else{
if(val <= minStack.peek()){
minStack.push(val);
}else{
minStack.push(minStack.peek());
}
}
dataStack.push(val);
}
public int pop(){
if(dataStack.empty()){
throw new RuntimeException("栈已经为空");
}
minStack.pop();
return dataStack.pop();
}
/*获取当前栈中最小的元素*/
public int getMin(){
if(minStack.empty()){
throw new RuntimeException("栈已经为空");
}
return minStack.peek();
}
}
左神算法学习
这个博客介绍了一个使用两个栈实现的特殊数据结构,其中一个用于存储数据,另一个用于跟踪最小值。在push、pop和getMin操作中,时间复杂度都保持为O(1)。通过在push时比较新值和当前最小值,确保了最小栈的正确性。在main方法中,展示了如何向栈中添加元素、获取最小值以及进行pop操作的过程。
1120

被折叠的 条评论
为什么被折叠?



