Skip to content

Commit 03a05bd

Browse files
committed
一刷128
1 parent b29e186 commit 03a05bd

File tree

10 files changed

+132
-23
lines changed

10 files changed

+132
-23
lines changed

README.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -922,12 +922,12 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
922922
|Medium
923923
|
924924

925-
//|{counter:codes}
926-
//|{leetcode_base_url}/longest-consecutive-sequence/[128. Longest Consecutive Sequence^]
927-
//|{source_base_url}/_0128_LongestConsecutiveSequence.java[Java]
928-
//|{doc_base_url}/0128-longest-consecutive-sequence.adoc[题解]
929-
//|Hard
930-
//|
925+
|{counter:codes}
926+
|{leetcode_base_url}/longest-consecutive-sequence/[128. Longest Consecutive Sequence^]
927+
|{source_base_url}/_0128_LongestConsecutiveSequence.java[Java]
928+
|{doc_base_url}/0128-longest-consecutive-sequence.adoc[题解]
929+
|Hard
930+
|
931931

932932
|{counter:codes}
933933
|{leetcode_base_url}/sum-root-to-leaf-numbers/[129. Sum Root to Leaf Numbers^]

docs/0001-two-sum.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ https://leetcode.cn/problems/two-sum/[LeetCode - 1. 两数之和 ^]
3333

3434
*提示:*
3535

36-
* `+2 <= nums.length <= 10+`^`4`^
37-
* stem:[-10^9 <= "nums"[i\] <= 10^9]
38-
* stem:[-10^9 <= "target" <= 10^9]
36+
* `2 \<= nums.length \<= 10^4^`
37+
* `-10^9^ \<= nums[i] \<= 10^9^`
38+
* `-10^9^ \<= target <= 10^9^`
3939
* *只会存在一个有效答案*
4040
4141
**进阶:**你可以想出一个时间复杂度小于 stem:[O(n^2)] 的算法吗?

docs/0033-search-in-rotated-sorted-array.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ https://leetcode.cn/problems/search-in-rotated-sorted-array/[LeetCode - 33. 搜
3838
*提示:*
3939

4040
* `+1 <= nums.length <= 5000+`
41-
* `+-10+`^`+4+`^`+<= nums[i] <= 10+`^`+4+`^
41+
* `-10+`^`+4+`^`+<= nums[i] <= 10+`^`+4+`^
4242
* `+nums+` 中的每个值都 *独一无二*
4343
* 题目数据保证 `+nums+` 在预先未知的某个下标上进行了旋转
4444
* `+-10+`^`+4+`^`+<= target <= 10+`^`+4+`^
Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,67 @@
11
[#0128-longest-consecutive-sequence]
2-
= 128. Longest Consecutive Sequence
2+
= 128. 最长连续序列
33

4-
{leetcode}/problems/longest-consecutive-sequence/[LeetCode - Longest Consecutive Sequence^]
4+
https://leetcode.cn/problems/longest-consecutive-sequence/[LeetCode - 128. 最长连续序列 ^]
55

6-
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
6+
给定一个未排序的整数数组 `nums`,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
77

8-
Your algorithm should run in O(_n_) complexity.
8+
请你设计并实现时间复杂度为 stem:[O(n)] 的算法解决此问题。
99

10-
*Example:*
10+
*示例 1:*
11+
12+
....
13+
输入:nums = [100,4,200,1,3,2]
14+
输出:4
15+
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
16+
....
17+
18+
*示例 2:*
19+
20+
....
21+
输入:nums = [0,3,7,2,5,8,4,6,0,1]
22+
输出:9
23+
....
24+
25+
*提示:*
26+
27+
* `0 \<= nums.length \<= 10^5^`
28+
* `-10^9^ \<= nums[i] \<= 10^9^`
1129
12-
[subs="verbatim,quotes,macros"]
13-
----
14-
*Input:* [100, 4, 200, 1, 3, 2]
15-
*Output:* 4
16-
*Explanation:* The longest consecutive elements sequence is `[1, 2, 3, 4]`. Therefore its length is 4.
17-
----
1830
31+
== 思路分析
1932

33+
首先想到的思路是排序,然后再查找。
34+
35+
答案的思路是:先将数字都添加到集合,然后遍历即可,只有没有前一位数字时,开始统计个数。
36+
37+
看其他选手答案,使用并查集也可以解决。
2038

2139
[[src-0128]]
40+
[tabs]
41+
====
42+
一刷::
43+
+
44+
--
2245
[{java_src_attr}]
2346
----
2447
include::{sourcedir}/_0128_LongestConsecutiveSequence.java[tag=answer]
2548
----
49+
--
50+
51+
// 二刷::
52+
// +
53+
// --
54+
// [{java_src_attr}]
55+
// ----
56+
// include::{sourcedir}/_0128_LongestConsecutiveSequence_2.java[tag=answer]
57+
// ----
58+
// --
59+
====
60+
61+
62+
== 参考资料
63+
64+
. https://leetcode.cn/problems/longest-consecutive-sequence/solutions/276931/zui-chang-lian-xu-xu-lie-by-leetcode-solution/[128. 最长连续序列 - 官方题解^]
65+
. https://leetcode.cn/problems/longest-consecutive-sequence/solutions/3652806/jian-yi-dai-ma-cbing-cha-ji-qiu-jie-by-w-b4hj/[128. 最长连续序列 - 简易代码——C++并查集求解^]
66+
. https://leetcode.cn/problems/longest-consecutive-sequence/solutions/3005726/ha-xi-biao-on-zuo-fa-pythonjavacgojsrust-whop/[128. 最长连续序列 - 哈希表 O(n) 做法^]
2667

docs/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ include::0125-valid-palindrome.adoc[leveloffset=+1]
338338

339339
include::0127-word-ladder.adoc[leveloffset=+1]
340340

341-
// include::0128-longest-consecutive-sequence.adoc[leveloffset=+1]
341+
include::0128-longest-consecutive-sequence.adoc[leveloffset=+1]
342342

343343
include::0129-sum-root-to-leaf-numbers.adoc[leveloffset=+1]
344344

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,11 @@ endif::[]
423423
|{doc_base_url}/0721-accounts-merge.adoc[题解]
424424
|❌ 并查集。通过邮箱编号建立连接,而不是通过账户索引建立连接。
425425

426+
|{counter:codes}
427+
|{leetcode_base_url}/longest-consecutive-sequence/[128. Longest Consecutive Sequence^]
428+
|{doc_base_url}/0128-longest-consecutive-sequence.adoc[题解]
429+
|⭕️ 最初思路是排序。看答案,可以构建集合,然后“起点”(没有前一个数字)数字开始统计。
430+
426431
|===
427432

428433
截止目前,本轮练习一共完成 {codes2503} 道题。

pom.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,39 @@
8787
</exclusion>
8888
</exclusions>
8989
</dependency>
90+
<dependency>
91+
<groupId>org.jruby</groupId>
92+
<artifactId>jruby</artifactId>
93+
</dependency>
94+
<dependency>
95+
<groupId>org.jruby</groupId>
96+
<artifactId>jruby-complete</artifactId>
97+
</dependency>
9098

9199
<dependency>
92100
<groupId>com.fasterxml.jackson.core</groupId>
93101
<artifactId>jackson-databind</artifactId>
94102
<version>2.17.1</version>
95103
</dependency>
96104
</dependencies>
97-
105+
<dependencyManagement>
106+
<dependencies>
107+
<dependency>
108+
<groupId>org.jruby</groupId>
109+
<artifactId>jruby</artifactId>
110+
<version>${jruby.version}</version>
111+
</dependency>
112+
<dependency>
113+
<groupId>org.jruby</groupId>
114+
<artifactId>jruby-complete</artifactId>
115+
<version>${jruby.version}</version>
116+
</dependency>
117+
</dependencies>
118+
</dependencyManagement>
98119
<build>
99120
<extensions>
100121
<extension> <!-- this allows us to download gems -->
122+
<!-- 依赖了 jruby 9.4.5.0,也无法修改 -->
101123
<groupId>org.jruby.maven</groupId>
102124
<artifactId>mavengem-wagon</artifactId>
103125
<version>${mavengem-wagon.version}</version>
@@ -178,6 +200,7 @@
178200
</dependencies>
179201
</plugin>
180202
<plugin>
203+
<!-- 依赖 jruby-complete 9.4.5.0,可以配置 jrubyVersion-->
181204
<groupId>org.jruby.maven</groupId>
182205
<artifactId>gem-maven-plugin</artifactId>
183206
<version>${gem-maven-plugin.version}</version>
@@ -437,6 +460,7 @@
437460
</executions>
438461
</plugin>
439462
<plugin>
463+
<!-- 依赖 jruby 9.4.8.0/9.4.12.0 -->
440464
<groupId>org.asciidoctor</groupId>
441465
<artifactId>asciidoctor-maven-plugin</artifactId>
442466
<version>${asciidoctor-maven-plugin.version}</version>

src/main/java/com/diguage/algo/leetcode/_0127_WordLadder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public class _0127_WordLadder {
5858
* Memory Usage: 49.1 MB, less than 5.11% of Java online submissions for Word Ladder.
5959
*
6060
* Copy from: https://leetcode.com/problems/word-ladder/solution/[Word Ladder solution - LeetCode]
61+
*
62+
* @author D瓜哥 · https://www.diguage.com
63+
* @since 2020-01-25 18:43
6164
*/
6265
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
6366
int L = beginWord.length();

src/main/java/com/diguage/algo/leetcode/_0127_WordLadder_2.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public class _0127_WordLadder_2 {
5454
// tag::answer[]
5555
/**
5656
* 自己解答
57+
*
58+
* @author D瓜哥 · https://www.diguage.com
59+
* @since 2024-06-30 21:46:35
5760
*/
5861
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
5962
Set<String> dic = new HashSet<>(wordList);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
public class _0128_LongestConsecutiveSequence {
7+
// tag::answer[]
8+
9+
/**
10+
* @author D瓜哥 · https://www.diguage.com
11+
* @since 2025-04-22 14:32:50
12+
*/
13+
public int longestConsecutive(int[] nums) {
14+
Set<Integer> set = new HashSet<>(nums.length);
15+
for (int num : nums) {
16+
set.add(num);
17+
}
18+
int result = 0;
19+
// 这里使用 set 遍历即可。使用 nums 超时
20+
for (int num : set) {
21+
int count = 1;
22+
if (!set.contains(num - 1)) {
23+
// 如果集合中包含目标数字,则遍历,否则就退出
24+
for (int i = num + 1; set.contains(i); i++) {
25+
count++;
26+
}
27+
}
28+
result = Math.max(result, count);
29+
}
30+
return result;
31+
}
32+
// end::answer[]
33+
}

0 commit comments

Comments
 (0)