Leetcode - Length of Longest Fibonacci Subsequence
https://leetcode.com/problems/length-of-longest-fibonacci-subsequence/
A sequence X_1, X_2, ..., X_n is fibonacci-like if:
-
n >= 3 -
X_i + X_{i+1} = X_{i+2}for alli + 2 <= n
Given a strictly increasing array A of positive integers forming a sequence, find the length of the longest fibonacci-like subsequence of A. If one does not exist, return 0.
(Recall that a subsequence is derived from another sequence A by deleting any number of elements (including none) from A, without changing the order of the remaining elements. For example, [3, 5, 8] is a subsequence of [3, 4, 5, 6, 7, 8].)
Example 1:
Input: [1,2,3,4,5,6,7,8] Output: 5 Explanation: The longest subsequence that is fibonacci-like: [1,2,3,5,8].
Example 2:
Input: [1,3,7,11,12,14,18] Output: 3 Explanation: The longest subsequence that is fibonacci-like: [1,11,12], [3,11,14] or [7,11,18].
func lenLongestFibSubseq(A []int) int {
if len(A) == 0 {
return 0
}
n := len(A)
dp := make([][]int, n)
max := 0
for i := 0; i < len(dp); i++ {
dp[i] = make([]int, n)
}
dp[0][0] = 1
for i := 2; i < n; i++ {
l := 0
r := i - 1
for l < r {
sum := A[l] + A[r]
if sum == A[i] {
dp[r][i] = dp[l][r] + 1
if dp[r][i] > max {
max = dp[r][i]
}
l++
r--
continue
}
if sum > A[i] {
r--
} else {
l++
}
}
}
if max == 0 {
return max
}
return max + 2
}
评论 (0)