定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的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 的返回第乙個,不過這不符合棧的...