《劍指offer》面試題8 包含min函式的棧

2022-01-12 17:00:23 字數 1883 閱讀 8163

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

這個題目我們首先拿到的**如下:

#

-*- coding:utf-8 -*-

class

solution:

defpush(self, node):

#入棧defpop(self):

#出棧deftop(self):

#顯示出最top的元素是什麼,並不彈出

defmin(self):

#write code here

一共有三個函式,分別是push,pop,top,min,push代表入棧,pop代表出棧,top代表棧頂的元素是哪乙個並列印出來,min代表當前棧中最小的元素是哪乙個。我們首先完成最基礎的乙個棧的結構:

#

-*- coding:utf-8 -*-

class

solution:

def__init__

(self):

self.stack=

defpush(self, node):

#入棧defpop(self):

#出棧if self.stack==:

return

none

self.minvalue.pop()

#和stack一起pop

return

self.stack.pop()

deftop(self):

#顯示出最top的元素是什麼,並不彈出

if self.stack==:

return

none

return self.stack.stack[-1]

defmin(self):

#write code here

我們在函式的自定義層定義了乙個stack棧的結構,這樣乙個最基礎的stack就擁有了所有的屬性,包括壓棧,出棧等。不過我們怎樣找出乙個棧當中最小的元素呢?

方法:

#

-*- coding:utf-8 -*-

class

solution:

def__init__

(self):

self.stack=

self.minvalue=

defpush(self, node):

#入棧ifself.minvalue:

#[3,2] node:1

#[3,2,1]

#[3,2],node:4

#[3,2,2]

#這樣就做到了保持minvalue的元素個數和stack保持一致,同時增加的都是越來越小的數

if self.minvalue[-1]>node:

else

:

else

:

defpop(self):

#出棧if self.stack==:

return

none

self.minvalue.pop()

#和stack一起pop

return

self.stack.pop()

deftop(self):

#顯示出最top的元素是什麼,並不彈出

if self.stack==:

return

none

return self.stack.stack[-1]

defmin(self):

if self.minvalue==:

return

none

else

:

return self.minvalue[-1]

#write code here

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

題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小最小元素的min函式。在該棧中,呼叫min push 及 pop的時間複雜度都是o 1 本題關鍵問題在於 o 1 時間複雜度的 min 函式。即無論佔中元素如何變化。都要在 o 1 內知道最小值。因此,需要設定兩個棧 1 資料棧,用於資料的...

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

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小素的min 函式。在該棧中,呼叫min push 及pop的時間複雜度都是0 1 題目分析 借助乙個輔助棧,當向棧中壓入元素時,跟輔助棧頂元素作比較,把最小的放到輔助棧中。每次都把最小元素放入輔助棧,這樣在彈出最小元素後,剩下的棧中棧頂...

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

題目 定義棧的資料結構,請在該型別中實現乙個能夠得到得到棧的最小元素min函式。在該棧中,呼叫該push pop min的時間複雜度都是o 1 思路 棧自身的特徵 後進先出。如何滿足在o 1 的時間內但返回最小的元素?思路1 將棧排序,將最小的放到前面,每次呼叫min 的返回第乙個,不過這不符合棧的...