LeetCode怎样实现包含min函数的栈
问题描述
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
解决思路
首先,我们需要一个普通的栈来支持 push,pop,top 操作。接下来,我们需要维护一个辅助栈来存储当前栈中的最小元素。
辅助栈的作用是在普通栈发生 push 或者 pop 操作时,能够实时更新当前最小元素。
解决方案
1. 初始化:我们需要创建两个栈,一个是普通栈,另一个是辅助栈。开始时,两个栈都为空。
2. push操作:当执行 push 操作时,我们首先将元素加入到普通栈中。然后,我们需要判断当前辅助栈是否为空,或者当前元素是否小于等于辅助栈的栈顶元素。如果是的话,我们将当前元素也加入到辅助栈中;否则,我们将辅助栈的栈顶元素再次加入到辅助栈中。
3. pop操作:当执行 pop 操作时,我们首先从普通栈中将元素删除。然后,我们从辅助栈中也删除一个元素。
4. top操作:当执行 top 操作时,我们直接返回普通栈的栈顶元素即可。
5. getMin操作:当执行 getMin 操作时,我们直接返回辅助栈的栈顶元素即可,该元素即为当前栈中的最小元素。
以下是包含min函数的栈的实现代码:
stack;
Stack minStack;
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
stack.push(x);
if (minStack.isEmpty() || x <= minStack.peek()) {
minStack.push(x);
} else {
minStack.push(minStack.peek());
}
}
public void pop() {
stack.pop();
minStack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.peek();
}
}
class MinStack {
Stack
解决复杂度
该解决方案的时间复杂度为O(1),空间复杂度为O(n)。
其中,push、pop、top和getMin操作的时间复杂度都为O(1),因为在执行这些操作时只需要对栈进行相应操作,而不需要遍历整个栈。
辅助栈的空间复杂度为O(n),因为在最坏情况下,辅助栈的元素个数和普通栈的元素个数一样。
猜您想看
-
怎么使用GlidedSky爬虫js加密
一、什么是Gl...
2023年05月25日 -
怎么构建swoole docker镜像
一、构建swo...
2023年05月25日 -
influxdb的原理是什么
1.Influ...
2023年05月22日 -
IP地址的计算方式
IP地址是计算...
2023年07月20日 -
如何自定义Edge浏览器的新标签页
如何自定义Ed...
2023年05月13日 -
Steam上下载游戏慢怎么办?
Steam上下...
2023年05月03日