155.最小栈
栈作为一种遵循后进先出(LIFO)原则的线性数据结构,具有重要地位。本题所涉及的最小栈(MinStack)是一种特殊栈结构,其核心特性在于能够在常数时间复杂度O(1)内获取栈中的最小元素。
实现最小栈的最直观方法是采用辅助栈机制:通过维护一个专门存储最小值的辅助栈,每当新元素入栈时,将其与当前栈顶元素进行比较,并将较小值压入辅助栈顶,从而确保辅助栈顶始终存储着当前栈中的最小元素。
代码:
class MinStack {
public:stack<int> stk,minStack;MinStack() {minStack.push(INT_MAX);}void push(int val) {int x = min(val,minStack.top());stk.push(val);minStack.push(x); }void pop() {stk.pop();minStack.pop();}int top() {return stk.top();}int getMin() {return minStack.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/
时间复杂度:push(),pop(),top(),getMin()都是O(1)的,所以总体是O(1)的
空间复杂度:O(n),n为新元素的个数