题目:定义栈的数据结构,要求添加一个min函数,可以获得栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。ios
思路:使用一个辅助栈来保存最小元素,这个解法简单不失优雅。设该辅助栈名字为minimum stack,其栈顶元素为当前栈中的最小元素。数据结构
要获取当前栈中最小元素,只须要返回minimum stack的栈顶元素便可。函数
每次执行push操做,检查push的元素是否小于或等于minimum stack栈顶元素。若是是,则也push该元素到minimum stack中。spa
当执行pop操做的时候,检查pop的元素是否与当前最小值相等。若是相同,则须要将改元素从minimum stack中pop出去。code
#include<stdio.h> #include <iostream> #include <stack> using namespace std ; struct StackGetMin { stack<int> elements; stack<int> minStack; void push(int x) { elements.push(x); if (minStack.empty() || x <= minStack.top()) //push的元素小于当前minStack的最小元素,则push到minStack中 minStack.push(x); } bool pop() { if (elements.empty()) return false; if (elements.top() == minStack.top()) //若是原始栈栈顶元素与minStack栈顶元素相同,则将该元素也从minStack中pop出去。 minStack.pop(); elements.pop(); return true; } bool getMin(int &min) { if (minStack.empty()) { return false; } else { min = minStack.top(); return true; } } }; int main() { StackGetMin stackMin; stackMin.push(2); stackMin.push(6); stackMin.push(4); stackMin.push(1); stackMin.push(5); int min =0; stackMin.getMin(min ); cout<<min; getchar(); return 0; }