classMinStack { public: /** initialize your data structure here. */ MinStack() { } voidpush(int x){ a.push(x); } voidpop(){ a.pop(); } inttop(){ return a.top(); } intgetMin(){ int i = a.top(); while(a.size() > 0) { int c = a.top(); if (c < i) i = c; a.pop(); b.push_back(c); } while(b.size() > 0) { a.push(b.back()); b.pop_back(); } return i; } stack<int> a; vector<int> b; };
/** * Your MinStack object will be instantiated and called as such: * MinStack* obj = new MinStack(); * obj->push(x); * obj->pop(); * int param_3 = obj->top(); * int param_4 = obj->getMin(); */
2.使用两个栈
栈 data 用来存储所有元素,栈 minStack 用来存储每次压栈时的最小值。
push(x):data.push(x),如果 minStack 为空,则说明是第一次压栈,需要将 x 也压入 minStack 中。如果 minStack 不为空,则将 x 与 minStack 栈顶元素比较,如果 x 较小也将 x 压入 minStack 中。这样,最小元素始终为 minStack 的栈顶元素。