[873][中等][动态规划] 最长的斐波那契子序列的长度
题目描述
输入: [1,2,3,4,5,6,7,8]
输出: 5
解释:
最长的斐波那契式子序列为:[1,2,3,5,8] 。输入: [1,3,7,11,12,14,18]
输出: 3
解释:
最长的斐波那契式子序列有:
[1,11,12],[3,11,14] 以及 [7,11,18] 。解题思路
动态规划
最后更新于
输入: [1,2,3,4,5,6,7,8]
输出: 5
解释:
最长的斐波那契式子序列为:[1,2,3,5,8] 。输入: [1,3,7,11,12,14,18]
输出: 3
解释:
最长的斐波那契式子序列有:
[1,11,12],[3,11,14] 以及 [7,11,18] 。最后更新于
class Solution:
def lenLongestFibSubseq(self, A: List[int]) -> int:
n = len(A)
index_map = {a: i for i, a in enumerate(A)}
dp = [[2] * n for _ in range(n)]
max_len = 0
for k in range(n):
for j in range(k):
diff = A[k] - A[j]
i = index_map.get(diff, None)
if i is not None and i < j:
dp[j][k] = dp[i][j] + 1
max_len = max(max_len, dp[j][k])
return max_len