题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
基本思路:利用两个栈,一个数据栈,一个辅助栈(保存当前栈中数据的最小值)
数据栈和辅助栈中任何时候元素个数相同,辅助栈栈顶的元素对应数据栈当前所有数据的最小值
push操作
最重要的操作,如果进栈元素value小于辅助栈栈顶元素,则value进入辅助栈;
否则辅助栈的栈顶元素min再次进入一次辅助栈,成为新的栈顶元素
数据栈和辅助栈中任何时候元素个数相同
pop操作
数据栈栈顶元素出栈时,辅助栈的栈顶元素也出栈,操作过后,辅助栈栈顶的元素依旧对应数据栈当前所有数据的最小值
class Solution { private: stack<int> s,smin; public: void push(int value) { s.push(value); if(smin.empty()){ smin.push(value); }else{ if(value < smin.top()){ smin.push(value); }else{ smin.push(smin.top()); } } return; } void pop() { if(!s.empty()){ s.pop(); smin.pop(); } return; } int top() { if(!s.empty()) s.top(); return 0; } int min() { if(!smin.empty()) return smin.top(); return 0; } };