快两年没做题了,压力好大,最近练习一下,保持一种感觉。
这个题据说是《剑指offer》上的一个题,其实我都解法明显有问题,但是还是AC了,我发现PHP,JS,C#写久了,我连Verctor都快不会写了。
此题正确的解法应该是用一个栈来维护最小值,是当前最小值即进入一个栈。另一个栈放数据,即可保证复杂度在O(n),查询复杂度O(1)。
我的解法比较中二:
class MinStack { private: vector<int> stack; int min; public: MinStack() { stack.clear();<br /> } void push(int x) { if (stack.empty() || min > x) { min = x; } stack.push_back(x); }</p> <pre><code>void pop() { if (!stack.empty()) { stack.pop_back(); genMin(); } } void genMin() { min = *(stack.begin()); for (vector&lt;int&gt;::iterator i = stack.begin() + 1; i &lt; stack.end(); i++) { if (min &gt; *i) { min = *i; } } } int top() { if (!stack.empty()) { return *(stack.end() - 1); } return false; } int getMin() { return min; } </code></pre> <p>};