实现一个特殊的栈,在实现基本功能的基础上,再返回栈中最小元素的功能;要求 pop、push、getMin操作的时间复杂度O(1)
C++ 方案一:
struct MyStack{
stack<int> data;
stack<int> min;
void push(int value) {
if (min.empty() || value <= this->getMin()) {
min.push(value);
}
data.push(value);
}
int pop() {
if (data.empty()) {
cout << "Your stack is empty!";
return -1;
}
int value = data.top();
data.pop();
if (value == this->getMin()) {
min.pop();
}
return value;
}
int getMin() {
if (min.empty()) {
cout << "Your stack is empty!";
return -1;
}
return min.top();
}
};
C++ 方案二:
struct MyStack {
stack<int> data;
stack<int> min;
void push(int value) {
if (min.empty() || value < getMin()) {
min.push(value);
} else {
min.push(min.top());
}
data.push(value);
}
int pop() {
if (data.empty()) {
cout << "Your stack is empty!";
return -1;
}
min.pop();
int value = data.top();
data.pop();
return value;
}
int getMin() {
if (min.empty()) {
cout << "Your stack is empty!";
return -1;
}
return min.top();
;
}
};
C++ | Java |
---|