题意:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
算法思想:定义两个栈,一个用来保存原数,一个用来求得栈的最小值。原栈每push一个元素,都与最小栈中的栈顶元素比较,如果比栈顶元素小,则最小栈push新元素,否则最小栈再次push最小栈栈顶元素。
实现代码一:时间复杂度O(1),空间复杂度O(n)
class Solution {
stack<int> srcStack;
stack<int> minStack;
public:
void push(int value) {
srcStack.push(value);
if(minStack.empty())
minStack.push(value);
else
{
int top = minStack.top();
if(top < value)
minStack.push(top);
else
minStack.push(value);
}
}
void pop() {
srcStack.pop();
minStack.pop();
}
int top() {
return srcStack.top();
}
int min() {
return minStack.top();
}
};
实现代码二:时间复杂度O(1),空间复杂度O(1)
class Solution {
stack<int> srcStack;
int minResult;
public:
void push(int value) {
if(srcStack.empty()){
srcStack.push(value);
minResult = value;
}
else{
if(value > minResult)
srcStack.push(value-minResult);
else{
srcStack.push(value-minResult);
minResult = value;
}
}
}
void pop() {
int top = srcStack.top();
srcStack.pop();
if(top < 0){
minResult -= top;
}
}
int top() {
int top = srcStack.top();
if(top < 0)
return minResult;
else
return minResult+top;
}
int min() {
return minResult;
}
};
网友评论