題目:用兩個棧來實現乙個佇列,完成佇列的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...