劍指刷題5

2021-10-01 04:53:37 字數 1329 閱讀 5654

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

解題思路:push操作的話其實佇列和棧的邏輯是一樣的,入口就是第乙個stack,主要是pop的話要實現佇列的先進先出的邏輯,所以要將stack中已有的node依次pop然後馬上push到stack2中。

class solution:

def __init__(self):

self.stack =

self.stack2 =

def push(self, node):

# write code here

def pop(self):

# return xx

if self.stack2:

return self.stack2.pop()

while self.stack:

return self.stack2.pop() if self.stack2 else none

**思路:沒有什麼特殊的情況需要考慮的,就是初始化的時候要生成兩個佇列。

題目:大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39

解題思路:這是一題用來駁斥遞迴效率的題目,這題不能簡單地使用遞迴的做法,因為重複的計算太多,浪費太多的計算資源。我們用遞迴樹來分析一下這個複雜度:

可以發現很多的節點是重複的,並且重複的節點數隨著n的增大而急劇增大。動態規劃就是用來儲存這些值來重複加以利用,所以時間上縮短了,但是空間上可能變大?遞迴問題是從上往下,而動態規劃是從下往上。遞迴問題是從大問題推到小問題,而動態規劃是先考慮小問題再考慮大問題。

class solution:

def fib(self, n: int) -> int:

a,b = 0,1

while n:

a,b = b,a+b

n -=1

return a

演算法思路:就是從下往上。

解題思路:這種題目就是要看出它的本質了,感覺有點像知識遷移能力題。

當n=1,有一種跳法

當n=2,一次跳乙個跳兩次,一次跳兩個跳一次,共兩種跳法

當n>=2時,n個台階,設有f(n)種跳法

(1)若第一次選擇跳1個台階,那麼剩下的n-1個台階有f(n-1)種跳法

(2)若第一次選中跳2個台階,那麼剩下的n-2個台階有f(n-2)種跳法

所以當有n個台階時 f(n) = f(n-1)+f(n-2)種跳法。

此問題可以歸結為斐波那契數列問題(需要注意的是斐波那契數列的第二項是1,此問題當n=2時是2)

引用:

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...

劍指offer刷題 2

思路 如果從前往後進行遍歷,那麼每次找到乙個空格,則需要新增兩個位元組來進行替換,我們採用先對字串進行遍歷,查詢字串中的空格的個數,然後對新的字串進行長度的計算,然後從後往前進行替換,每遇到乙個空字元,然後進行替換。class solution int oldnumber 0 int numbers...