题目网址:https://leetcode-cn.com/problems/min-stack/
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
常数时间的意思是时间复杂度是O(1);
思路是:
用空间换时间,用额外的空间把最小的元素提取保存好
我们创建两个栈,A和B
A用来表示栈中的数据
B专门用来存当前栈对应的最小值。
AB两个栈,第一次push时,A和B都push,此时第一次插入的值计为最小值,第二次插入值,A栈直接插入这个值,B栈顶与这个值比较进行打擂台,如果B栈顶的值比插入值大,栈顶插入插入值。如果B栈顶的值比插入值小,还是插入栈顶值
关键就是B的栈顶永远保存栈的最小值,擂台思想
出栈时记得两个栈都要出

B的栈顶永远是擂台的最小值
import java.util.Stack;
class MinStack {
/** initialize your data structure here. */
public MinStack() {
}
//A用来表示正常栈中的数据
//B用来存储每一层A栈中对应的最小值
private Stack<Integer> A = new Stack<>();
private Stack<Integer> B = new Stack<>();
public void push(int x) {
//1.先把元素插入到A之中
A.push(x);
//最小值插入B
if(B.isEmpty()){
B.push(x);
return;
}
//B如果不为空,B的栈顶元素就是之前的最小值,这时候需要与插的新元素进行对比
int min = B.peek();
if(x < min){
min = x;
}
B.push(min);
}
public void pop() {
if(A.isEmpty()) {
return;
}
A.pop();
B.pop();
}
public int top() {
return A.peek();
}
public int getMin() {
return B.peek();
}
}

本文介绍了一种特殊的数据结构——MinStack,它能够在常数时间内完成push、pop、top操作并检索到最小元素。通过使用两个栈A和B,A用于存储数据,B则始终保持其顶部为A的最小元素,实现高效查询。
1711

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



