โ† All problems

873. Length of Longest Fibonacci Subsequence

MediumOpen on LeetCodeProblem statement

Problem Statement

873. Length of Longest Fibonacci Subsequence

Medium


A sequence x1, x2, ..., xn is Fibonacci-like if:

Given a strictly increasing array arr of positive integers forming a sequence, return the length of the longest Fibonacci-like subsequence of arr. If one does not exist, return 0.

A subsequence is derived from another sequence arr by deleting any number of elements (including none) from arr, 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: arr = [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: arr = [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].

 

Constraints:

Java โ€” brute force

Source file
class Solution {
    public int lenLongestFibSubseq(int[] arr) {
        int n = arr.length, maxStreak = 0;
        Set<Integer> set = Arrays.stream(arr).boxed().collect(Collectors.toSet());
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int fib1 = arr[i], fib2 = arr[j], fib3 = fib1 + fib2, streak = 2;
                while (set.contains(fib3)) {
                    streak++;
                    fib1 = fib2;
                    fib2 = fib3;
                    fib3 = fib1 + fib2;
                }
                maxStreak = Math.max(streak, maxStreak);
            }
        }
        return maxStreak > 2 ? maxStreak : 0;
    }
}