第二天打卡,废话不多说,我们开始吧。
题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -2.
提示:
各函数的调用总次数不超过 20000 次
我们通过读题,可以发现需要在常量级的时间内找到最小值!
那自然就可以想到,我们绝不能在需要最小值的时候,再做排序,查找等操作来获取!所以,我们可以创建两个栈,一个栈是原栈 min,正常进行操作,而辅助栈assi则存放应主栈不同时期的最小值。
class MinStack {
stack mi,ass;
public:
MinStack() {
ass.push(INT_MAX); //初始化辅助栈,使top函数能正常操作
}
void push(int x) { //压栈的时候我们对原栈和辅助栈都要进行操作,
//原栈就正常压,辅助栈在压的时候进行判断,压当前栈和输入中的最小的
mi.push(x);
if(x
运行结果:
。



