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

2021-10-08 01:48:44 字數 3161 閱讀 2542

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

入隊時資料存到stackin,出隊時資料從stackout彈出。

執行入隊操作時,資料源源不斷的壓入棧stackin。

執行出隊操作時,stackout為空,則把stackin裡的資料全部彈出壓倒stackout中,當stackout棧非空時,不斷彈出stackout棧中的資料順序即為佇列的pop順序;

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

class

solution

:def

__init__

(self)

: self.stackin=

self.stackout=

defpush

(self, node)

:# write code here

defpop

(self)

:# return xx

if self.stackout==

:while self.stackin:))

return self.stackout.pop(

)if __name__ ==

'__main__'

: solution = solution(

) solution.push(1)

solution.push(2)

solution.push(3)

solution.pop(

) solution.pop(

) solution.push(4)

solution.pop(

) solution.push(5)

solution.pop(

) solution.pop(

)

「student. a am i」翻轉為「i am a student.」

#思路1

'''棧,後進先出'''

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

class

solution

:def

reversesentence

(self, s)

:# write code here

alist=s.split(

' ')

stackin=

for i in alist:

result=

while stackin:))

return

' '.join(

[x for x in result]

)

#思路2

'''使用字串分割連線'''

class

solution

:def

reversesentence

(self, s)

: alist=s.split(

' ')

return

' '.join(alist[::

-1])

# 法一:雙端佇列

'''思路:

迴圈遍歷陣列,

1.把列表對應的索引入隊,隊尾元素小於當前元素則刪除隊尾元素,直到隊尾元素大於當前元素,然後將當前元素插入隊尾。

2.如果i>=k-1,說明視窗已經形成(i-k+1,i),插入隊頭元素到res。如果佇列頭部元素小於下乙個視窗[i-k+2,i+1]左邊界,刪除佇列頭部。

'''class

solution

:def

maxinwindows

(self, num, size)

:# write code here

ifnot num or size>

len(num)

or size ==0:

return

if size ==1:

return num

from collections import deque

res =

deq = deque([0

])for i in

range(1

,len

(num)):

if i - deq[0]

>= size:

#控制滑塊大小為size

deq.popleft(

)if num[i]

> num[deq[0]

]:deq = deque(

[i])

else

:while num[i]

> num[deq[-1

]]: deq.pop(

)if i >= size-1:

# i-k+1>0是滑動視窗的左邊界,視窗邊界:(i-k+1,i)0]

])return res

s1=solution(

)# re=s1.maxslidingwindow([12,5,66,3,2,8,9,4],3)

re=s1.maxslidingwindow([4

,6,3

,5,2

,8,15

,52],

4)print

(re)

# 法二:max()函式求最大值

# 用切片控制滑塊中的數值,max()函式求最大值,儲存到列表中

defmaxinwindows

(self, num, size)

: res =

iflen

(num)

>

0and size >0:

endp = size

while endp <=

len(num)

:max

(num[endp-size:endp]))

endp +=

1return res

劍指offer題目

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣...

劍指offer 棧 佇列類題目

題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 題目中有兩個棧stack1和stack2,用來模擬佇列的操作,我是想把第乙個stack1作為資料儲存,第二個stack2作為中轉。佇列的特點是先進先出,1 入隊操作,因為用stack1作為儲存,首先得判斷上...

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

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 思路 用空間換時間,用乙個輔助棧記錄當前棧中的最小值。輔助棧元素個數和資料棧保持一樣的數目。例如一次壓入資料棧數字串行為 3,2,4,1,5 那麼一次壓入輔助棧的為 3,2,2,1,1 當每次壓入資料棧...