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),因为在最坏情况下,辅助栈的元素个数和普通栈的元素个数一样。
猜您想看
-
如何在csgo中进行高难度跳跃
一、准备工作要...
2023年05月15日 -
如何快速准确地使用苹果手机的Siri语音助手?
苹果手机Sir...
2023年04月27日 -
如何在 EmBlog 博客系统中设置 Markdown 编辑器
如何在 EmB...
2023年04月15日 -
LeetCode如何找出字符串中的第一个唯一字符
LeetCod...
2023年05月25日 -
python修改文件需要注意什么
在Python...
2023年07月04日 -
MySql的Sql优化方法是什么
SQL优化的概...
2023年07月21日