思路:创建两个栈,一个是原始数据,一个存最值的栈,
添加最值栈时候,判断是否比当前最值栈的栈顶值大或者小,根据最值,是否加入新值还是原来值。
最后返回最值
public class SpecialStack {
Stack<Integer> stack = new Stack<>();
Stack<Integer> min = new Stack<>();
public void push(int val){
//如果两个栈都为空,那么都为最值
if(stack.empty()&&min.empty()){
stack.push(val);
min.push(val);
}else {
stack.push(val);
//根据栈顶值和新加入的值,比较,判断是否添加
min.push(min.peek()>val?val:min.peek());
}
}
public Integer pop(){
Integer pop = stack.pop();
min.pop();
return pop;
}
public Integer getMin(){
return min.peek();
}
public static void main(String[] args) {
SpecialStack specialStack = new SpecialStack();
specialStack.push(1);
specialStack.push(-9);
specialStack.push(0);
specialStack.push(-1);
System.out.println(specialStack.getMin());
}
}
使用双栈实现特殊栈功能
该博客介绍了一个名为`SpecialStack`的数据结构实现,它维护了两个栈,一个用于存储所有元素,另一个用于存储最小值。在`push`操作中,新值会与最小值栈的栈顶值比较,只将较小的值压入最小值栈。`pop`操作则同时弹出两个栈的栈顶元素。这样,`getMin`方法可以在常数时间内返回栈中的最小值。这是一个高效的方法来管理和检索最小值。
482

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



