題目:
定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。
思路一:
通過每次在壓入棧頂的元素與當前最小元素相比後,保存一遍最小元素,每次彈出,都彈出兩個,這個就能得到棧當前最小元素了
代碼:
class Solution { public: void push(int value) { if(s1.size()==0) { s1.push(value); int min=value; s1.push(min); } else { int min=s1.top(); if(value<min) { min=value; } s1.push(value); s1.push(min); } } //彈出兩次 void pop() { int min=s1.top(); s1.pop(); int val=s1.top(); s1.pop(); } int top(){ int min=s1.top(); s1.pop(); int val=s1.top(); s1.push(min); return val; } int min() { return s1.top(); } private: stack<int> s1; };
思路二:利用兩個棧,一個棧用於壓入數據,另一個棧用於壓入數據時的最小元素。無論最小元素是不是壓棧的元素,都保存到第二個棧中
代碼:
class Solution { public: void push(int value) { if(s1.size()==0) { s1.push(value); s2.push(value); } else { s1.push(value); int min=s2.top(); if(min>value) { s2.push(value); } else { s2.push(min); } } } void pop() { if(!s1.empty()) { s1.pop(); s2.pop(); } } int top() { return s1.top(); } int min() { return s2.top(); } private: stack<int> s1,s2; };