leetcode解题链接
普通栈的 push() 和 pop() 函数的复杂度为 O(1);而获取栈最小值 min() 函数需要遍历整个栈,复杂度为O(N) 。
现在要实现获取栈最小值 min() 函数,并使其复杂度为O(1)。
#include#include using namespace std; //实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 //使用一个辅助栈来实现这个需求。辅助栈的保持一个非严格递减的状态。 class MinStack{ //stack_a作为原始栈来存放数据 stack stack_a; //stack_b作为辅助栈用于存放一个非严格递减的序列,栈顶元素一直表示的是栈stack_a中的最小值 stack stack_b; public: MinStack(){} void push(int value){ stack_a.push(value); //当stack_b为空,或者当前插入的值小于等于stack_b的栈顶元素时,将新元素插入至stack_b if(stack_b.empty()||value<=stack_b.top()){ stack_b.push(value); } } int pop(){ int value=stack_a.top(); stack_a.pop(); if(value==stack_b.top()){ stack_b.pop(); } return value; } int get_min(){ return stack_b.top(); } int top(){ return stack_a.top(); } }; int main() { MinStack s; s.push(-2); s.push(0); s.push(-3); cout <



