Problem
Solution
这题的题意一开始看错了
我看题目还以为让实现最小堆(写这句话的时候突然反应过来堆的英文是heap QAQ)
其实题目就是让你实现一个普通的栈,有常规的push、pop、top操作
另外让你在o(1)时间内实现查找栈中的最小元素
那么,因为栈是FILO的数据结构,我们只需另外开一个栈,来记录到某个位置时栈中的最小元素
拿入栈的元素和另外这个辅助栈的栈顶元素比较
若入栈元素小,则成为新的栈中最小元素
否则要把原来的栈顶元素再一次入栈,表示到这个位置为止的最小值
class MinStack {
public:
/** initialize your data structure here. */
int minst[1000000],st[1000000],t;
MinStack() {
t=-1;
}
void push(int x) {
st[t+1]=x;
if(t==-1) minst[t+1]=x;
else minst[t+1]=x<minst[t]?x:minst[t];
t++;
}
void pop() {
t--;
}
int top() {
return st[t];
}
int getMin() {
return minst[t];
}
};