[leetcode]873.C++实现 最长的斐波那契子序列的长度(Length of Longest Fibonacci Subsequence)

(一)题目描述

[leetcode]873.C++实现 最长的斐波那契子序列的长度(Length of Longest Fibonacci Subsequence)_第1张图片

[leetcode]873.C++实现 最长的斐波那契子序列的长度(Length of Longest Fibonacci Subsequence)_第2张图片

 

(二)思想方法

动态规划: dp[j][i]=max(dp[j][i],dp[it->second][j]+1);

斐波那契式 的:

  • n >= 3
  • 对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}

(三)代码实现

#include 
class Solution {
public:
    int lenLongestFibSubseq(vector& A) {
          unordered_mapmp;//以nums中的每个值为key,对应的下标为value
        int maxlen = 0;//maxlen是返回结果
        for(int i = 0;i>dp;
        for(int i = 0;ivec;
            for(int j = 0;j=0;j--){
                int preval=A[i]-A[j];
                if(preval>=A[j])//要求preval的下标必须小于j
                    break;
                unordered_map::iterator it = mp.find(preval);
                if(it!=mp.end()){
                    dp[j][i]=max(dp[j][i],dp[it->second][j]+1);//it->second就是preval的下标
                    if(dp[j][i]>maxlen)
                        maxlen=dp[j][i];//更新maxlen
                }

            }
        }
        return maxlen;

    }
};

 

你可能感兴趣的:(算法,leetcode)