您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“LeetCode怎么實現包含min函數的棧”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“LeetCode怎么實現包含min函數的棧”這篇文章吧。
定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間復雜度應為O(1))。
解析
看到這個問題, 我們最開始可能會想, 添加一個成員變量用于保存最小元素, 每次壓棧時如果壓棧元素比當前最小元素更小, 就更新最小元素.
但是這樣會有一個問題, 如果最小元素被彈出了呢, 如何獲得下一個最小元素呢?分析到這里可以發現, 僅僅添加一個成員變量存放最小元素是不夠的, 我們需要在最小元素彈出后還能得到次小元素, 次小的彈出后, 還要能得到次次小的.因此, 用另一個棧來保存這些元素是再合適不過的了. 我們叫它最小元素棧.
每次壓棧操作時, 如果壓棧元素比當前最小元素更小, 就把這個元素壓入最小元素棧, 原本的最小元素就成了次小元素. 同理, 彈棧時, 如果彈出的元素和最小元素棧的棧頂元素相等, 就把最小元素的棧頂彈出.
代碼
class Solution {
public:
void push(int value) {
s.push(value);
if(sMin.empty())
sMin.push(value);
else if(value <= sMin.top())
sMin.push(value);
}
void pop() {
if(s.top() == sMin.top())
sMin.pop();
s.pop();
}
int top() {
return s.top();
}
int min() {
return sMin.top();
}
private:
stack<int> s;
stack<int> sMin;
};
以上是“LeetCode怎么實現包含min函數的棧”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。