演算法刷題02 包含min函式的棧

2021-09-10 18:18:03 字數 787 閱讀 9223

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。

class solution 

void pop()

int top()

int min()

};

利用乙個輔助棧存放最小值

棧:3 4 3 5 2

輔助棧:3 3 2 

壓棧的時候,如果壓入的數比輔助棧棧頂大,則輔助棧不壓入;小於等於,棧和輔助棧都壓入。

出棧的時候,如果棧頂和輔助棧的棧頂不等,棧的棧頂彈出,輔助棧的棧頂不彈出。

根據題目描述,該題目的關鍵之處在於時間複雜度應為o(1),而不是實現棧的功能。

能夠使得獲取最小值時間複雜度為o(1)的方法只有:

先獲取最小值,並將最小值放在乙個資料結構中,而min函式只要直接return這個資料結構的該最小值。

再聯想到:因為push()和pop()均會對最小值影響,所以每次push()和pop()操作都要對存放最小值的資料結構操作;

且還要實現棧的功能。

於是最簡便的資料結構便是直接使用stl的棧。

class solution 

else}}

void pop()

stack1.pop();

}int top()

int min()

};

18 包含min函式的棧

包含min函式的棧 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。劍指offer上的例子講解的非常精彩。error control may reach end of non void function werror,wreturn type 意為無法找到non void fu...

20 包含min函式的棧

思路1 選用存放資料的棧s和存放當前最小值的輔助棧mins,當s記憶體入比當前最小值還小的樹,則該數字入輔助棧,若存放值比當前最小值大,則再次存入當前最小值到輔助棧 這樣mins存在冗餘資訊,可進一步改進。1 class solution else void pop int top int min ...

20 包含min函式的棧

題目 定義乙個棧的資料結構,請在該型別中實現乙個能夠得到棧中最小元素的min函式 思路 可以使用兩個棧,乙個儲存資料,乙個儲存棧中的最小元素。例如 定義兩個棧stack1和stack2,將4壓入stack1,stack2為空,同時將4壓入stack2 然後將2壓入stack1,這時stack1的最小...