今天leetcode的每日一题,题目链接为:873. 最长的斐波那契子序列的长度 这里想到一种解法:
首先将数据用HashMap记录下来,接着从数组中取两个数,并判断这两数之和是否在HashMap中,若在,则继续递归向下判断,并记录最大长度,代码如下:
class Solution {
int maxTemp = -1;
int jTmp =-1;
int max = 0;
public int lenLongestFibSubseq(int[] arr) {
Map<Integer,Integer> map = new HashMap();
for (int i = 0; i < arr.length; i++) {
map.put(arr[i],i);
}
for (int i = 0; i < arr.length-2; i++) {
maxTemp = -1;
for (int j = i+1; j < arr.length-1; j++) {
int a = arr[i];
int b = arr[j];
jTmp = j;
getMaxTemp(map, a, b);
}
}
return max;
}
private void getMaxTemp(Map<Integer, Integer> map, int a, int b) {
int sum = a + b;
if(map.containsKey(sum)&& map.get(sum)> jTmp){
if(maxTemp ==-1){
maxTemp = 2;
}
a = b;
b =sum;
jTmp = map.get(sum);
maxTemp++;
max = Math.max(max,maxTemp);
getMaxTemp(map, a, b);
}else{
maxTemp=-1;
}
}
}