题目:
自定义栈的数据结构,push()、pop(),添加一个min函数,能够得到栈的最小元素。要求时间复杂度都是O(1)。
分析:(max同理)
1、求最值
有个相似的问题:求一个整形数组中的最小值
int min(int array[], int length)
{
int min = array[0];
for (int i = 1; i < length; ++i)
if (array[i] < min)
min = array[i];
return min;
}
2、撤销
当前最小值出栈之后,需要找回曾经的最小值;
类似,网页的后退操作
3、空间换取时间
根据上面的分析,就是用一个栈记录曾经的最小值
MyStack.h
#ifndef _MY_STACK_H_
#define _MY_STACK_H_
#include <stack>
using namespace std;
class Stack
{
public:
int top() const
{
return data.top();
}
void pop()
{
if (data.top() == minValue.top())
minValue.pop();
data.pop();
}
void push(const int value)
{
data.push(value);
if (minValue.empty())
{
minValue.push(value);
}
else
{
if (value < minValue.top())
minValue.push(value);
}
}
int min() const
{
return minValue.top();
}
private:
stack<int> data;
stack<int> minValue;
};
#endif