当前位置 : 主页 > 网络编程 > 其它编程 >

LeetCode873.最长的斐波那契子序列的长度

来源:互联网 收集:自由互联 发布时间:2023-07-02
截止到目前我已经写了500多道算法题其中部分已经整理成了pdf文档目前总共有1000多页并且还会不断的增加其中部分已经整理成了pdf文档目前总共有1000多页并且还会不断的增加大家可以免
截止到目前我已经写了500多道算法题其中部分已经整理成了pdf文档目前总共有1000多页并且还会不断的增加其中部分已经整理成了pdf文档目前总共有1000多页并且还会不断的增加大家可以免费下载 下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码6666

在这里插入图片描述在这里插入图片描述

public int lenLongestFibSubseq(int[] A) {int size A.length;//先把数组A中的所有元素都存储在Set中Set set new HashSet();for (int num : A)set.add(num);//记录构成的最长斐波那契数列的长度int maxLength 0;for (int i 0; i < size; i)for (int j i 1; j (second, firstsecond)second first second;first second - first;//记录当前能构成的斐波那契数列的长度len;}//更新最大的斐波那契数列长度if (len > maxLength)maxLength len;}//能构成斐波那契数列长度必须大于等于3如果小于3//说明不能构成斐波那契数列直接返回0否则返回maxLengthreturn maxLength > 3 ? maxLength : 0;}

在这里插入图片描述

for (int j 2; j 0; i--) {//确定A[i]for (int k i - 1; k > 0; k--) {//往前查找A[k]if (A[k] A[i] A[j]) {dp[i][j] dp[k][i] 1;//如果找到就终止内层循环不在往前查找了break;} else if (A[k] A[i] < A[j]) {//题中说了是递增的正整数数组如果当前A[k]//小了那么前面的就更小没有合适的没必要//在往前找了直接终止内层循环break;}}maxLength Math.max(maxLength, dp[i][j]);}}

我们来看下最终代码

public int lenLongestFibSubseq(int[] A) {//记录最大的斐波那契数列的长度int maxLength 0;int length A.length;int[][] dp new int[length][length];for (int j 2; j 0; i--) {//确定A[i]for (int k i - 1; k > 0; k--) {//往前查找A[k]if (A[k] A[i] A[j]) {dp[i][j] dp[k][i] 1;//如果找到就终止内层循环不在往前查找了break;} else if (A[k] A[i] 0 ? maxLength 2 : 0;}

在这里插入图片描述

public int lenLongestFibSubseq(int[] A) {//记录最大的斐波那契数列的长度int maxLength 0;int length A.length;int[][] dp new int[length][length];Map map new HashMap();for (int j 0; j 0; i--) {//确定A[i]//因为是递增的如果A[j]和A[i]之间相差比较大//就不需要再往前查找了if (A[j] - A[i] > A[i])continue;//通过map往前查找A[k]int k map.getOrDefault(A[j] - A[i], -1);//如果k不等于-1说明在数组中找到了A[k]这个值if (k > 0) {dp[i][j] dp[k][i] 1;maxLength Math.max(maxLength, dp[i][j]);}}}return maxLength > 0 ? maxLength 2 : 0;}

在这里插入图片描述 在这里插入图片描述 视频链接

最后再来看下代码

public int lenLongestFibSubseq(int[] A) {//记录最大的斐波那契数列的长度int maxLength 0;int length A.length;int[][] dp new int[length][length];for (int j 2; j < length; j) {//确定A[j]//左右两个指针int left 0;int right j - 1;while (left A[j]) {//因为数组是递增的如果两个指针指向的值//大了那么右指针往左移一步来减小他俩的和right--;} else if (sum 0 ? maxLength 2 : 0;}

上一篇:Python实现远程开关机【高薪必备技术】
下一篇:没有了
网友评论