問題: https://leetcode.com/problems/length-of-longest-fibonacci-subsequence/
O(N 2)は、既存の+ B = Cのハッシュマップの結果は、最大保持し、その後フィボナッチ数列を終了クラスの現在の最大数を計算しました。
ここで、DP [i] [j]は、i番目の選択された数に、j番目の現在の数を表します。
クラス解決{ パブリック: INT lenLongestFibSubseq(ベクトル< INT >&A){ int型 N = A.size()。 unordered_map < int型、int型 > 数; 以下のために(int型 i = 0 ; iがn <; iは++ ) { 番号[A [I] = I。 } ベクトル <ベクトル<ペア< INT、INT >>> 最後の(N) INT MAXNUM = A.back()。 にとって(int型 I = 0 ; iがN <; Iは++)// 開始 { ため(int型 I + = J 1、jは<N; J ++)// 端 { INT NUM = A [i]が+ A [J]。 もし(NUM> MAXNUM) { ブレーク。 } であれば(number.find(NUM)=!number.end()) { 最後[数[NUM]一back({I、J。}); } } } int型 RES =0 ; ベクター <ベクトル< INT >> DP(nは、ベクトル< INT >(N、0 )); 以下のために(int型 i = 0 ; iがn <; iは++ ) { ための(自動&K:最後[I]) { DP [k.second] [i]は = MAX(DP [k.second] [I]、DP [K 1次回] [k.second] + 1 )。 RES = MAX(RES、DP [k.second] [I])。 } } もし(RES == 0)戻り 0 ; リターン RES +2 ; } }。