题目:
想要让查找最小值为O(1),那么每次查询的时候必定是一种映射关系。
说到映射关系很容易想到哈希表,实际上哈希表这题应该也是可以做的。
但是其实更进一步,更好的结构是再用一个栈。
因为当一个元素X入栈的时候,可以查看当前元素是否小于辅助栈的栈顶,如果小于,则辅助栈入栈X。如果大于等于栈顶,则栈顶元素再入栈一次。
class MinStack {
public:
/** initialize your data structure here. */
stack<int> mainStack;
stack<int> supStack;
MinStack() {
}
void push(int x) {
mainStack.push(x);
if(supStack.empty())
{
supStack.push(x);
}
else if(x<supStack.top()){
supStack.push(x);
}
else if(x>=supStack.top()){
supStack.push(supStack.top());
}
}
void pop() {
mainStack.pop();
supStack.pop();
}
int top() {
return mainStack.top();
}
int min() {
return supStack.top();
}
};