两个栈实现栈内最小数据的查询,建立一个栈A存放原始数据,再利用另一个栈B存放每一次的当前栈中的最小数,当栈A要push新的数据时,首先将该数据与栈B的top值相比较,如果栈A的数据比栈B的top值小,则将该数push近栈B,否则栈B压入上一次栈顶的值,这样就记录了每一次比较的最小值。pop时也是一样栈A与栈B的top值相等时,同时pop,否则只pop栈A的top值。
#include<iostream> #include<stack> #include<string> using namespace std; class Solution{ public: void push(int value){ StackData.push(value); if(StackMin.empty()||value<=StackMin.top()) { StackMin.push(value); } else if(value>StackMin.top()) { StackMin.push(StackMin.top()); } } void pop(){ if(!StackData.empty()) { StackData.pop(); StackMin.pop(); } else { throw out_of_range(""); } } int top() { return StackData.top(); } int getMin() { return StackMin.top(); } private: stack<int> StackData; stack<int> StackMin; }; static Solution obj; int main() { int n,value; string s; cin>>n; while(n--){ cin>>s; if(s=="push") { cin>>value; obj.push(value); } else if(s=="getMin") { cout<<obj.getMin()<<endl; } else { obj.pop(); } } return 0; }