定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。
思路:用空間換時間,用乙個輔助棧記錄當前棧中的最小值。輔助棧元素個數和資料棧保持一樣的數目。例如一次壓入資料棧數字串行為:
3,2,4,1,5 那麼一次壓入輔助棧的為:3,2,2,1,1
當每次壓入資料棧的元素小余輔助站的元素的時候,才把新元素壓入輔助棧,否則把輔助站棧頂元素去到壓入輔助棧,保持兩個棧元素個數一致。
備註:stack.peek 與 stack.pop 的區別
相同點:大家都返回棧頂的值。
不同點:peek 不改變棧的值(不刪除棧頂的值),pop會把棧頂的值刪除。
---------------------
原文:
解題思路:利用輔助棧來儲存現有棧的最小值。在入棧和出棧的時候將現有棧和最小值棧進行比較。
入棧時,若新值比最小值棧的棧頂還小,則將該值同時push到最小值棧;出棧時,若現有棧的棧頂和最小值棧棧頂一致,則同時出棧,否則,僅僅現有棧pop;通過這一操作,最小值棧的棧頂將永遠是現有棧元素中的最下值。
---------------------
原文:
# -*- coding:utf-8 -*-輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)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,然後判斷棧頂元素是不是出棧順序的第乙個元素,這裡是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。另外乙個方法較為...