資料結構(劍指offer)(堆疊)(python)

2021-09-10 15:13:12 字數 2203 閱讀 5656

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

思路:用空間換時間,用乙個輔助棧記錄當前棧中的最小值。輔助棧元素個數和資料棧保持一樣的數目。例如一次壓入資料棧數字串行為:

3,2,4,1,5  那麼一次壓入輔助棧的為:3,2,2,1,1

當每次壓入資料棧的元素小余輔助站的元素的時候,才把新元素壓入輔助棧,否則把輔助站棧頂元素去到壓入輔助棧,保持兩個棧元素個數一致。

備註:stack.peek 與 stack.pop 的區別

相同點:大家都返回棧頂的值。

不同點:peek 不改變棧的值(不刪除棧頂的值),pop會把棧頂的值刪除。

---------------------

原文:

解題思路:利用輔助棧來儲存現有棧的最小值。在入棧和出棧的時候將現有棧和最小值棧進行比較。

入棧時,若新值比最小值棧的棧頂還小,則將該值同時push到最小值棧;出棧時,若現有棧的棧頂和最小值棧棧頂一致,則同時出棧,否則,僅僅現有棧pop;通過這一操作,最小值棧的棧頂將永遠是現有棧元素中的最下值。

---------------------

原文:

# -*- coding:utf-8 -*-

class solution:

def __init__(self):

self.stack =

self.min_stack =

def push(self, node):

# write code here

def pop(self):

# write code here

if self.stack[-1] == self.min_stack[-1]:

self.min_stack.pop()

self.stack.pop()

def top(self):

# write code here

return self.stack[-1]

def min(self):

# write code here

return self.min_stack[-1]

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

【思路】借用乙個輔助的棧,遍歷壓棧順序,先講第乙個放入棧中,這裡是1,然後判斷棧頂元素是不是出棧順序的第乙個元素,這裡是4,很顯然1≠4,所以我們繼續壓棧,直到相等以後開始出棧,出棧乙個元素,則將出棧順序向後移動一位,直到不相等,這樣迴圈等壓棧順序遍歷完成,如果輔助棧還不為空,說明彈出序列不是該棧的彈出順序。

舉例:入棧1,2,3,4,5

出棧4,5,3,2,1

首先1入輔助棧,此時棧頂1≠4,繼續入棧2

此時棧頂2≠4,繼續入棧3

此時棧頂3≠4,繼續入棧4

此時棧頂4=4,出棧4,彈出序列向後一位,此時為5,,輔助棧裡面是1,2,3

此時棧頂3≠5,繼續入棧5

此時棧頂5=5,出棧5,彈出序列向後一位,此時為3,,輔助棧裡面是1,2,3

# -*- coding:utf-8 -*-

class solution:

def ispoporder(self, pushv, popv):

# stack中存入pushv中取出的資料

stack=

while popv:

# 如果第乙個元素相等,直接都彈出,根本不用壓入stack

if pushv and popv[0]==pushv[0]:

popv.pop(0)

pushv.pop(0)

#如果stack的最後乙個元素與popv中第乙個元素相等,將兩個元素都彈出

elif stack and stack[-1]==popv[0]:

stack.pop()

popv.pop(0)

# 如果pushv中有資料,壓入stack

elif pushv:

# 上面情況都不滿足,直接返回false。

else:

return false

return true

劍指offer 五) 資料結構 棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 程式 思路 利用乙個輔助棧來存放最小值 棧 3,4,2,5,1 輔助棧 3,3,2,2,1 每入棧一次,就與輔助棧頂比較大小,如果小就入棧,如果大就入棧當前的輔助棧頂 當出棧時,輔助棧也要出棧 這種做法...

劍指offer 資料結構類題目()

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。入隊時資料存到stackin,出隊時資料從stackout彈出。執行入隊操作時,資料源源不斷的壓入棧stackin。執行出隊操作時,stackout為空,則把stackin裡的資料全部彈出壓倒stackout中,當st...

劍指Offer 資料結構 05 替換空格

q 請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 1 限制 0 s 的長度 10000 這個題目將某字串中的單個字元替換為多個字元,改變了字串的長度,無法直接替換,有2種比較明顯的方法,乙個是構建乙個新的字串,根據每次遍歷的字元決定加入新字串中非空格的單字元還是 20。另外乙個方法較為...