c++ 设计包含 min 函数的栈(栈) 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。 要求函数 min、push 以及 pop 的时间复杂度都是 O(1)
时间: 2024-02-18 18:02:46 浏览: 74
好的,我可以帮你设计一个包含 min 函数的栈。
首先,我们可以使用两个栈来实现。一个栈用来保存原始数据,另一个栈用来保存当前最小值。
具体实现如下:
```c++
class MinStack {
public:
void push(int x) {
dataStack.push(x);
if (minStack.empty() || x <= minStack.top()) {
minStack.push(x);
}
}
void pop() {
if (dataStack.top() == minStack.top()) {
minStack.pop();
}
dataStack.pop();
}
int top() {
return dataStack.top();
}
int getMin() {
return minStack.top();
}
private:
stack<int> dataStack;
stack<int> minStack;
};
```
在 push 操作中,我们将数据压入 dataStack 中。然后,我们需要检查当前元素是否小于等于 minStack 栈顶元素。如果是,我们将元素压入 minStack 中。这样,minStack 中的栈顶元素就是当前栈中的最小值。
在 pop 操作中,我们需要检查 dataStack 栈顶元素是否等于 minStack 栈顶元素。如果是,我们也需要将 minStack 栈顶元素弹出,因为这个元素已经被弹出了。
在 top 操作中,我们只需要返回 dataStack 栈顶元素即可。
在 getMin 操作中,我们只需要返回 minStack 栈顶元素即可。
由于我们使用了两个栈来实现,所以所有操作的时间复杂度都是 O(1)。
阅读全文