用 Python 编写程序,从给定列表中查找最长斐波那契子序列的长度

pythonserver side programmingprogramming

假设我们有一个严格递增的正数列表,称为 nums。我们必须找到最长子序列 A(长度最小为 3)的长度,使得对于所有 i > ,A[i] = A[i - 1] + A[i - 2] 1.

因此,如果输入为 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],则输出将为 6,因为我们可以选择 [1, 2, 3, 5, 8, 13]。

为了解决这个问题,我们将遵循以下步骤 −

  • A := nums
  • n := A 的大小
  • maxLen := 0
  • S := 来自 A 的新集合
  • 对于范围为 0 到 n 的 i,执行
    • 对于范围为 i + 1 到 n 的 j,执行
      • x := A[j]
      • y := A[i] + A[j]
      • length := 2
      • 当 y 存在于 S 中时,执行
        • z := x + y
        • x := y
        • y := z
        • length := length + 1
        • maxLen := maxLen、length 中的最大值
  • 如果 maxLen > 2,则
    • 返回 maxLen
  • 否则,
    • 返回 0

让我们看看下面的实现以便更好地理解 −

示例

class Solution:
   def solve(self, nums):
      A = nums
      n = len(A)
      maxLen = 0
      S = set(A)
      for i in range(0, n):
         for j in range(i + 1, n):
            x = A[j]
            y = A[i] + A[j]
            length = 2
            while y in S:
               z = x + y
               x = y
               y = z
               length += 1
               maxLen = max(maxLen, length)
      if maxLen > 2:
         return maxLen
      else:
         return 0
ob = Solution()
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
print(ob.solve(nums))

输入

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

输出

6

相关文章


有用资源