实现一个栈,获取栈内最大元素
题目:实现一个栈,使栈的Push、Pop Top和Max的时间复杂度为O(1),Max()将返回栈内最大的元素。
思路:用两个栈,第一个是常规栈,第二个只存储到来的元素中比栈顶大的元素。
复杂度分析:时间复杂度符合题目要求O(1)。空间复杂度最坏情况附加的stack中需要储存每个元素,故额外使用O(n)
空间。
class stackWithMax{private:stack<int> valueStack;stack<int> maxStack;public:void push(int);int pop();int max();
};void stackWithMax::push(int value)
{if(maxStack.empty() || maxStack.top() <= value){maxStack.push(value);}valueStack.push(value);
}int stackWithMax::pop()
{int value = valueStack.top();valueStack.pop();if(value == maxStack.top()){maxStack.pop();}return value;
}int stackWithMax::max()
{return maxStack.top();
}