Q; How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push, pop and min should all operate in O(1) time.
A: 用两个栈s1, s2, s1正常push, pop,. s2保存非递增序列,即当元素值小于等于s2.top()的时候,才会push进去
#include <iostream>
#include <stack>
using namespace std;
const int MAX_INT = ~(1<<31);
class stackWithMin{
private:
stack<int> s1;
stack<int> s2;
public:
void push(int val) {
s1.push(val);
if (s2.empty() || val <= s2.top()) {
s2.push(val);
}
}
void pop() {
if (s1.top() == s2.top()) {
s2.pop();
}
s1.pop();
}
int top() {
return s1.top();
}
bool empty() {
return s1.empty();
}
int min() {
if (s2.empty()) {
return MAX_INT;
}
return s2.top();
}
};
int main(){
stackWithMin mystack;
for(int i=0; i<20; ++i)
mystack.push(i);
cout<<mystack.min()<<" "<<mystack.top()<<endl;
mystack.push(-100);
mystack.push(-100);
cout<<mystack.min()<<" "<<mystack.top()<<endl;
mystack.pop();
cout<<mystack.min()<<" "<<mystack.top()<<endl;
return 0;
}
本文介绍了一种特殊的数据结构——栈,除了支持基本的push和pop操作外,还实现了min函数,用于返回栈中当前的最小元素,所有操作均在O(1)时间内完成。通过使用两个栈s1和s2,s1用于常规的元素存取,而s2则保持非递增顺序,确保min操作快速响应。
2万+

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



