[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
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值