class MinStack { public: stack<int> cur_stack; stack<int> cur_min;//用来存储最小值的栈 int min_num; MinStack() {//初始化 this->min_num = INT_MAX; } void push(int x) {//压入栈,同时记录最小值 if (x < this->min_num) this->min_num = x; cur_min.push(this->min_num); cur_stack.push(x); } void pop() {//弹出栈,删除的同时注意小心最小值的变化 cur_min.pop(); if (cur_min.empty()) this->min_num = INT_MAX; else this->min_num = cur_min.top(); cur_stack.pop(); } int top() {//查看栈顶 return cur_stack.top(); } int getMin() {//当前最小值,等同于查看存储最小值的栈顶 return cur_min.top(); } };
分析:
嘿嘿,偷懒了,直接用了别人的栈,但是作用不一样啊,我这个能查看最小值。不然那就用两个队列实现栈了。
编程太渣了,第一时间没想起来,最小值随着栈的弹出也会变化。第二时间没想起来弹出之后最小值的阈值也会变。