劍指offer 棧相關

2021-08-28 18:10:57 字數 1061 閱讀 5301

回歸一下基本概念:python 實現棧

例如序列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:

"""先將第乙個放入棧中,這裡是1,然後判斷棧頂元素是不是出棧順序的第乙個元素,

這裡是4,很顯然1≠4,所以我們繼續壓棧,直到相等以後開始出棧,出棧乙個元素,

則將出棧順序向後移動一位,直到不相等,這樣迴圈等壓棧順序遍歷完成,

如果輔助棧還不為空,說明彈出序列不是該棧的彈出順序。

"""def ispoporder(self, pushv, popv):

if not pushv:return false

stk = # 宣告乙個輔助棧

for item in pushv:

while stk and stk[-1]==popv[0]:

# 當輔助棧的棧頂元素和出棧元素相同時,

# 兩個一起彈出

stk.pop()

popv.pop(0)

if stk:

return false

return true

劍指Offer(一) 棧

目錄 1 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。2 棧的壓入 彈出序列 思路 3 包含min函式的棧 思路 c 解答 python解答 4 二叉搜尋樹的後序遍歷序列 5 按之字形順序列印二叉樹 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。cod...

劍指offer 樹相關

樹相關 1.重建二叉樹 1 class solution 89 treenode constructcore vector pre,vector vin,int sp,int ep,int si,int ei 10 20 中序找到根,分為左右子樹 21int index si 22while ind...

棧和佇列 劍指offer

題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的 min函式。class solution def init self self.elem def push self,node def pop self return self.elem.pop def top self return...