劍指offer 面試題21 包含min函式的棧

2021-07-04 15:19:04 字數 1414 閱讀 1582

題目:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小最小元素的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 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...