刷題筆記(十七)——包含min函數的棧
一直在忙着復現論文,好久不刷題了,論文筆記也有幾篇沒更,近期補上~
題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。
注意:保證測試中不會當棧爲空的時候,對棧調用pop()或者min()或者top()方法。
思路:
在棧中加入一個可以輸出當前棧中最小的元素函數
可以藉助另一棧來存放當前棧中最小的元素,棧1進行push操作時,若該元素小於等於棧2中棧頂元素,則棧2也執行push操作。棧1進行pop操作時,若棧1的棧頂元素即要pop的元素等於棧2 中的棧頂元素,則棧2也執行pop操作,否則,棧2不進行pop操作。
則棧1中的最小元素即爲棧2的棧頂元素。
代碼
class Solution {
public:
stack<int> s1;
stack<int> s2;
void push(int value) {
s1.push(value);
if(s2.empty())
s2.push(value);
else if(s2.top()>=value)//注意等號
s2.push(value);
}
void pop() {
if(s1.top()==s2.top())
{
s1.pop();
s2.pop();
}
else
s1.pop();
}
int top() {
return s1.top();
}
int min() {
return s2.top();
}
};