每日演算法1 2020 06 05

2021-10-10 19:18:23 字數 1576 閱讀 6965

泰波那契序列 tn 定義如下:

t0 = 0, t1 = 1, t2 = 1, 且在 n >= 0 的條件下 tn+3 = tn + tn+1 + tn+2

給你整數n,請返回第 n 個泰波那契數 tn 的值。

示例 1:

輸入:n = 4

輸出:4

解釋:t_3 = 0 + 1 + 1 = 2

t_4 = 1 + 1 + 2 = 4

示例 2:

輸入:n = 25

輸出:1389537

class

solution

return t[n];}

}

class

solution

return t[n];}

}

方法一:空間優化,動態計算

class

solution

return z;

}}

複雜度分析

方法二:效能優化:帶記憶的遞迴

class

tri:

def __init__

(self)

: def helper

(k):

if k ==0:

return

0if nums[k]

:return nums[k]

nums[k]

=helper

(k -1)

+helper

(k -2)

+helper

(k -3)

return nums[k]

n =38 self.nums = nums =[0

]* n

nums[1]

= nums[2]

=1helper

(n -1)

class

solution

: t =

tri(

) def tribonacci

(self, n:

int)

->

int:

return self.t.nums[n]

複雜度分析

時間複雜度:o(1),預計算 38 個斐波那契數,並在陣列中檢索。

空間複雜度:o(1),儲存 38 個斐波那契數的陣列。

方法三:效能優化:動態計算

class

tri}

class

solution

}

複雜度分析

時間複雜度:o(1),預計算 38 個斐波那契數字,並在陣列中檢索。

空間複雜度:o(1),儲存 38 個斐波那契數字的陣列。

每日演算法 洗牌演算法

給定乙個n個數的序列,設計乙個演算法將其隨機打亂,保證每個數出現在任意乙個位置的概率相同 也就是說在n 個的排列中,每乙個排列出現的概率相同 假設輸入為陣列num length 隨機選乙個數,放到num 0 中,再隨機選數,如果該數已經選過,重新選,直到該數未選過時放入num 1 中,以此類推,直到...

每日演算法 報數

1.1 2.11 3.21 4.1211 5.1112211被讀作 one 1 乙個一 即11。11被讀作 two 1s 兩個一 即21。21被讀作 one 2 one 1 乙個二 乙個一 即1211。給定乙個正整數 n 1 n 30 輸出報數序列的第 n 項。注意 整數順序將表示為乙個字串。示例 ...

每日演算法 1

1 leetcode第46題 全排列 給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 1 思路 核心思想是在乙個排列的基礎上,1,2,3,按照規律交換位置,得到新的排列。比如1和2交換 2,1,...