Description
Implement a stack with min() function, which will return the smallest number in the stack.
It should support push, pop and min operation all in O(1) cost.
题目模板
class MinStack { public: MinStack(){} /* * @param number: An integer * @return: nothing */ void push(int number) { // write your code here } /* * @return: An integer */ int pop() { // write your code here } /* * @return: An integer */ int min() { // write your code here } };
题目大意
让你维护一个最小值栈,每次可以获得这个栈中的最小值。
大概思路
这道题好像以前做过,所以还是比较简单的。双栈来实现,一个栈是正常的,另一个栈负责维护第一个栈中的最小值。两个栈可以不是同步升降的,只有当第一个栈新加的数据小于等于第二个栈栈顶的数据时,才把这个数加到第二个栈里面。这里写小于等于是考虑到同时加两个最小值进来的情况。
class MinStack { private: stack<int> s, smin; public: MinStack(){} /* * @param number: An integer * @return: nothing */ void push(int number) { // write your code here s.push(number); if(smin.empty()) smin.push(number); else if(number <= smin.top()) smin.push(number); } /* * @return: An integer */ int pop() { // write your code here if(s.top() == smin.top()) smin.pop(); int t = s.top(); s.pop(); return t; } /* * @return: An integer */ int min() { // write your code here return smin.top(); } };
细节方面
注意在pop()的时候要把栈里的值弹出来一个。