class Solution { public int lenLongestFibSubseq(int[] arr) { Map<Integer, Integer> indices = new HashMap<Integer, Integer>(); int n = arr.length; for (int i = 0; i < n; i++) { indices.put(arr, i); } int[][] dp = new int[n][n]; int ans = 0; for (int i = 0; i < n; i++) { for (int j = i - 1; j >= 0 && arr[j] * 2 > arr; j--) { int k = indices.getOrDefault(arr - arr[j], -1); if (k >= 0) { dp[j] = Math.max(dp[k][j] + 1, 3); } ans = Math.max(ans, dp[j]); } } return ans; }}