題目:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小最小元素的min函式。在該棧中,呼叫min、push 及 pop的時間複雜度都是o(1)。
本題關鍵問題在於:o(1)時間複雜度的 min 函式。
即無論佔中元素如何變化。都要在 o(1)內知道最小值。
因此,需要設定兩個棧:
1、資料棧,用於資料的壓入和彈出
2、輔助棧,存入與資料棧中相對應的最小元素
即 資料棧每壓入乙個元素,輔助棧壓入當時資料棧內所有元素的最小值;彈出資料棧元素時,也相應的彈出輔助棧內的min元素,保持輔助棧的棧頂元素永遠是 資料棧元素的最小值。
在解決問題時,可以 舉例 幫助自己思考。
#include #include //#include using namespace std;
/*模板類定義*/
templateclass stack_with_min
virtual ~stack_with_min(){} /**因為在撤銷時,還有乙個類stack,因此需要設成虛擬的*/
t& top();
const t& top() const;
void push(const t& value);
void pop();
const t& min() const;
bool empty() const;
size_t size() const;
};/* min 函式 */
template void stack_with_min::push(const t& value)
template void stack_with_min::pop()
template const t& stack_with_min::min()const
/******************************************/
template t& stack_with_min::top()
template const t& stack_with_min::top() const
template bool stack_with_min::empty() const
template size_t stack_with_min::size() const
通過這道題學習了:
1、舉例項一步步分析,對問題的分析,有很大幫助
2、認識到了幾個薄弱點:模板類的使用,虛析構函式的理解,常成員函式的理解 以及 系統庫的有效利用(並不需要自己 從頭定義棧)。
/*點滴積累,我的一小步o(∩_∩)o~*/
劍指offer 面試題21 包含min函式的棧
題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小素的min 函式。在該棧中,呼叫min push 及pop的時間複雜度都是0 1 題目分析 借助乙個輔助棧,當向棧中壓入元素時,跟輔助棧頂元素作比較,把最小的放到輔助棧中。每次都把最小元素放入輔助棧,這樣在彈出最小元素後,剩下的棧中棧頂...
劍指offer 面試題21 包含min函式的棧
題目 定義棧的資料結構,請在該型別中實現乙個能夠得到得到棧的最小元素min函式。在該棧中,呼叫該push pop min的時間複雜度都是o 1 思路 棧自身的特徵 後進先出。如何滿足在o 1 的時間內但返回最小的元素?思路1 將棧排序,將最小的放到前面,每次呼叫min 的返回第乙個,不過這不符合棧的...
劍指offer面試題21
面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...