就是实现一个能在常数时间内返回最小值的栈。
根据常规思维,减少时间开销的代价一般都是增大空间开销,所以往这个方向去思考。因为栈可能随时都在弹出元素,所以单纯的用一个变量去维护最小值是不够的,这里可以用另一个栈来辅助。
单独设置一个栈mini用以保存当前栈顶元素进栈时的最小值,即每一个新元素进站时从此元素与当前mini栈顶元素中得到较小值,在x进栈的同时将这个最小值压入mini栈。这样mini栈顶就一定是当前栈内的最小值。
class MinStack { protected: vector<int> data; vector<int> mini; public: /** initialize your data structure here. */ MinStack() { mini.push_back(INT_MAX); } void push(int x) { int tmp = min(mini.back(), x); data.push_back(x); mini.push_back(tmp); } void pop() { if(data.empty()) return; data.pop_back(); mini.pop_back(); } int top() { if(data.empty()) return 0; return data.back(); } int getMin() { if(data.empty()) return 0; return mini.back(); } };
习惯地用了vector来模拟栈,当然用stack只会更方便。
评论
还没有任何评论,你来说两句吧!