Skip to content

Commit 0107253

Browse files
committed
一刷873
1 parent 23412da commit 0107253

5 files changed

Lines changed: 104 additions & 44 deletions

File tree

README.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6136,13 +6136,13 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
61366136
|Easy
61376137
|
61386138

6139-
//|{counter:codes}
6140-
//|{leetcode_base_url}/length-of-longest-fibonacci-subsequence/[873. Length of Longest Fibonacci Subsequence^]
6141-
//|{source_base_url}/_0873_LengthOfLongestFibonacciSubsequence.java[Java]
6142-
//|{doc_base_url}/0873-length-of-longest-fibonacci-subsequence.adoc[题解]
6143-
//|Medium
6144-
//|
6145-
//
6139+
|{counter:codes}
6140+
|{leetcode_base_url}/length-of-longest-fibonacci-subsequence/[873. Length of Longest Fibonacci Subsequence^]
6141+
|{source_base_url}/_0873_LengthOfLongestFibonacciSubsequence.java[Java]
6142+
|{doc_base_url}/0873-length-of-longest-fibonacci-subsequence.adoc[题解]
6143+
|Medium
6144+
|
6145+
61466146
//|{counter:codes}
61476147
//|{leetcode_base_url}/walking-robot-simulation/[874. Walking Robot Simulation^]
61486148
//|{source_base_url}/_0874_WalkingRobotSimulation.java[Java]
Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,70 @@
11
[#0873-length-of-longest-fibonacci-subsequence]
2-
= 873. Length of Longest Fibonacci Subsequence
2+
= 873. 最长的斐波那契子序列的长度
33

4-
{leetcode}/problems/length-of-longest-fibonacci-subsequence/[LeetCode - Length of Longest Fibonacci Subsequence^]
5-
6-
A sequence `X_1, X_2, ..., X_n` is _fibonacci-like_ if:
4+
https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence/[LeetCode - 873. 最长的斐波那契子序列的长度^]
75

6+
如果序列 `X~1~, X~2~, ..., X~n~` 满足下列条件,就说它是 __斐波那契式 __ 的:
87
98
* `n >= 3`
10-
* `X_i + X_{i+1} = X_{i+2}` for all `i + 2 <= n`
11-
12-
13-
Given a *strictly increasing* array `A` of positive integers forming a sequence, find the *length* of the longest fibonacci-like subsequence of `A`. If one does not exist, return 0.
14-
15-
(_Recall that a subsequence is derived from another sequence `A` by deleting any number of elements (including none) from `A`, without changing the order of the remaining elements. For example, `[3, 5, 8]` is a subsequence of `[3, 4, 5, 6, 7, 8]`._)
16-
17-
18-
19-
9+
* 对于所有 `i + 2 \<= n`,都有 `X~i~ + X~i+1~ = X~i+2~`
2010
11+
给定一个**严格递增**的正整数数组形成序列 arr,找到 arr 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。
2112
22-
*Example 1:*
13+
_(回想一下,子序列是从原序列 arr 中派生出来的,它从 arr 中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。例如, `[3, 5, 8]` 是 `[3, 4, 5, 6, 7, 8]` 的一个子序列)_
2314
24-
[subs="verbatim,quotes,macros"]
25-
----
26-
*Input:* [1,2,3,4,5,6,7,8]
27-
*Output:* 5
28-
*Explanation:
29-
*The longest subsequence that is fibonacci-like: [1,2,3,5,8].
30-
----
15+
*示例 1:*
3116
32-
*Example 2:*
17+
....
18+
输入: arr = [1,2,3,4,5,6,7,8]
19+
输出: 5
20+
解释: 最长的斐波那契式子序列为 [1,2,3,5,8] 。
21+
....
3322
34-
[subs="verbatim,quotes,macros"]
35-
----
36-
*Input:* [1,3,7,11,12,14,18]
37-
*Output:* 3
38-
*Explanation*:
39-
The longest subsequence that is fibonacci-like:
40-
[1,11,12], [3,11,14] or [7,11,18].
41-
----
23+
*示例 2:*
4224
43-
25+
....
26+
输入: arr = [1,3,7,11,12,14,18]
27+
输出: 3
28+
解释: 最长的斐波那契式子序列有 [1,11,12]、[3,11,14] 以及 [7,11,18] 。
29+
....
4430
45-
*Note:*
31+
*提示:*
4632
33+
* `3 \<= arr.length \<= 1000`
34+
* `1 \<= arr[i] < arr[i + 1] \<= 10^9^`
4735
48-
* `3 <= A.length <= 1000`
49-
* `1 <= A[0] < A[1] < ... < A[A.length - 1] <= 10^9`
50-
* _(The time limit has been reduced by 50% for submissions in Java, C, and C++.)_
5136
37+
== 思路分析
5238
39+
哈希!遍历数组,模拟斐波那契数列的计算过程。
5340
41+
最优解是使用动态规划。回头尝试一下。
5442
5543
[[src-0873]]
44+
[tabs]
45+
====
46+
一刷::
47+
+
48+
--
5649
[{java_src_attr}]
5750
----
5851
include::{sourcedir}/_0873_LengthOfLongestFibonacciSubsequence.java[tag=answer]
5952
----
53+
--
54+
55+
// 二刷::
56+
// +
57+
// --
58+
// [{java_src_attr}]
59+
// ----
60+
// include::{sourcedir}/_0873_LengthOfLongestFibonacciSubsequence_2.java[tag=answer]
61+
// ----
62+
// --
63+
====
64+
65+
66+
== 参考资料
6067
68+
. https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence/solutions/1656456/zui-chang-de-fei-bo-na-qi-zi-xu-lie-de-c-c4dt/[873. 最长的斐波那契子序列的长度 - 枚举+记忆化搜索+动态规划^]
69+
. https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence/solutions/1654336/zui-chang-de-fei-bo-na-qi-zi-xu-lie-de-c-8trz/[873. 最长的斐波那契子序列的长度 - 官方题解^]
70+
. https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence/solutions/1656437/by-ac_oier-beo2/[873. 最长的斐波那契子序列的长度 - 经典序列 DP 运用题^]

docs/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1838,7 +1838,7 @@ include::0870-advantage-shuffle.adoc[leveloffset=+1]
18381838

18391839
include::0872-leaf-similar-trees.adoc[leveloffset=+1]
18401840

1841-
// include::0873-length-of-longest-fibonacci-subsequence.adoc[leveloffset=+1]
1841+
include::0873-length-of-longest-fibonacci-subsequence.adoc[leveloffset=+1]
18421842

18431843
// include::0874-walking-robot-simulation.adoc[leveloffset=+1]
18441844

logbook/202601.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,6 +1186,10 @@ endif::[]
11861186
|{doc_base_url}/0872-leaf-similar-trees.adoc[题解]
11871187
|✅ 深度优先遍历。我用的是迭代法。
11881188

1189+
|{counter:codes}
1190+
|{leetcode_base_url}/length-of-longest-fibonacci-subsequence/[873. Length of Longest Fibonacci Subsequence^]
1191+
|{doc_base_url}/0873-length-of-longest-fibonacci-subsequence.adoc[题解]
1192+
|✅ 哈希。最优解是使用动态规划。遍历数组,模拟斐波那契数列的计算过程。
11891193

11901194

11911195
|===
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
public class _0873_LengthOfLongestFibonacciSubsequence {
7+
// tag::answer[]
8+
/**
9+
* @author D瓜哥 · https://www.diguage.com
10+
* @since 2026-08-19 21:27:11
11+
*/
12+
public int lenLongestFibSubseq(int[] arr) {
13+
Set<Integer> set = new HashSet<>();
14+
for (int num : arr) {
15+
set.add(num);
16+
}
17+
int result = 0;
18+
for (int i = 0; i < arr.length; i++) {
19+
for (int j = i + 1; j < arr.length; j++) {
20+
int a = arr[i];
21+
int b = arr[j];
22+
int len = 0;
23+
if (arr[arr.length - 1] < (a + b)) {
24+
break;
25+
}
26+
while (set.contains(a + b)) {
27+
len++;
28+
int temp = a + b;
29+
System.out.println(a + " + " + b + " = " + temp);
30+
a = b;
31+
b = temp;
32+
}
33+
if (len > 0) {
34+
result = Math.max(result, len + 2);
35+
}
36+
}
37+
}
38+
return result;
39+
}
40+
41+
// end::answer[]
42+
static void main() {
43+
new _0873_LengthOfLongestFibonacciSubsequence()
44+
.lenLongestFibSubseq(new int[]{2, 4, 7, 8, 9, 10, 14, 15, 18, 23, 32, 50});
45+
}
46+
}

0 commit comments

Comments
 (0)