[LeetCode]Length of Longest Fibonacci Subsequence@Golang

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 all i + 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

Input: [1,2,3,4,5,6,7,8]
Output: 5
Explanation:
The longest subsequence that is fibonacci-like: [1,2,3,5,8].

Solution

func lenLongestFibSubseq(A []int) int {
    N := len(A)
    ret:= 0
    m := make(map[int]int)
    dp := make([][]int, N+1)
    for i:=0;i<N;i++{
        dp[i] = make([]int, N+1)
        m[A[i]] = i
        for j:=0;j<i;j++{
            if v,ok:= m[A[i]-A[j]];ok && A[i]-A[j]<A[j] && v>=0{
                dp[j][i] = dp[v][j]+1
            } else{
                dp[j][i] = 2
            }
            ret = max(dp[j][i], ret)
        }
    }
    if ret>2{
        return ret
    } else{
        return 0
    }
    
}

func max(a, b int)int{
    if a>b {
        return a
    } else {
        return b
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章