Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
分析:
可以使用 vector 或者 stack 来实现功能数据存储。
关键是要在常量时间取得最小值,可以在插入数据时就判断最小值然后保存在成员变量中,在 pop 时需要重新计算最小值(如果出栈的值等于最小值)。
还要注意 top 和 pop 时空栈的判断。
class MinStack {
public:
void push(int x) {
if(data.size() >= data.max_size())
{
return;
}
if(data.empty())
minData = x;
else if(x < minData)
{
minData = x;
}
data.push_back(x);
}
void pop() {
if(data.empty())
{
return;
}
int size = data.size();
int re = data[size-1];
if((1 == size)||(re > minData))
{
data.pop_back();
return;
}
else
{
minData = data[0];
for(int i = 1; i<size-1; ++i)
{
if(data[i] < minData)
{
minData = data[i];
}
}
data.pop_back();
}
}
int top() {
if(data.empty())
{
return -1;
}
return data[data.size()-1];
}
int getMin() {
if(data.empty())
{
return 0;
}
return minData;
}
private:
vector<int> data;
int minData;
};