Skip to content

Commit 3bbd3d5

Browse files
committed
二刷41
1 parent ff96252 commit 3bbd3d5

File tree

6 files changed

+68
-1
lines changed

6 files changed

+68
-1
lines changed

Diff for: docs/0000-07-fast-slow-pointers.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[#0000-07-fast-slow-pointers]
22
= Fast & Slow Pointers 快慢指针
33

4-
这种模式,有一个非常出门的名字,叫龟兔赛跑。咱们肯定都知道龟兔赛跑啦。但还是再解释一下快慢指针:这种算法的两个指针的在数组上(或是链表上,序列上)的移动速度不一样。还别说,这种方法在解决有环的链表和数组时特别有用。
4+
这种模式,有一个非常出名的名字,叫龟兔赛跑。咱们肯定都知道龟兔赛跑啦。但还是再解释一下快慢指针:这种算法的两个指针的在数组上(或是链表上,序列上)的移动速度不一样。还别说,这种方法在解决有环的链表和数组时特别有用。
55

66
通过控制指针不同的移动速度(比如在环形链表上),这种算法证明了他们肯定会相遇的。快的一个指针肯定会追上慢的一个(可以想象成跑道上面跑得快的人套圈跑得慢的人)。
77

Diff for: docs/0041-first-missing-positive.adoc

+25
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,34 @@ Output: 1
3737
Your algorithm should run in _O_(_n_) time and uses constant extra space.
3838

3939

40+
== 思路分析
41+
42+
image::images/0041-01.png[{image_attr}]
43+
4044
[[src-0041]]
45+
[tabs]
46+
====
47+
一刷::
48+
+
49+
--
4150
[{java_src_attr}]
4251
----
4352
include::{sourcedir}/_0041_FirstMissingPositive.java[tag=answer]
4453
----
54+
--
55+
56+
二刷::
57+
+
58+
--
59+
[{java_src_attr}]
60+
----
61+
include::{sourcedir}/_0041_FirstMissingPositive_2.java[tag=answer]
62+
----
63+
--
64+
====
65+
66+
67+
== 参考资料
4568

69+
. https://leetcode.cn/problems/first-missing-positive/solutions/304743/que-shi-de-di-yi-ge-zheng-shu-by-leetcode-solution/[41. 缺失的第一个正数 - 官方题解^]
70+
. https://leetcode.cn/problems/first-missing-positive/solutions/7703/tong-pai-xu-python-dai-ma-by-liweiwei1419/[41. 缺失的第一个正数 - 原地哈希(哈希函数为:f(nums[i]) = nums[i] - 1)^]

Diff for: docs/images/0041-01.png

214 KB
Loading

Diff for: logbook/202406.adoc

+5
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,11 @@
414414
|{doc_base_url}/0057-insert-interval.adoc[题解]
415415
|合并区间,思路周全再写代码!
416416

417+
|{counter:codes}
418+
|{leetcode_base_url}/first-missing-positive/[41. First Missing Positive^]
419+
|{doc_base_url}/0041-first-missing-positive.adoc[题解]
420+
|循环排序,思路有意思!
421+
417422
|===
418423

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

Diff for: src/main/java/com/diguage/algo/leetcode/_0041_FirstMissingPositive.java

+3
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public class _0041_FirstMissingPositive {
4343
* Runtime: 0 ms, faster than 100.00% of Java online submissions for First Missing Positive.
4444
*
4545
* Memory Usage: 34.6 MB, less than 100.00% of Java online submissions for First Missing Positive.
46+
*
47+
* @author D瓜哥 · https://www.diguage.com
48+
* @since 2019-10-23 12:54:29
4649
*/
4750
public int firstMissingPositive(int[] nums) {
4851
if (Objects.isNull(nums) || nums.length == 0) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0041_FirstMissingPositive_2 {
4+
// tag::answer[]
5+
6+
/**
7+
* @author D瓜哥 · https://www.diguage.com
8+
* @since 2024-08-29 17:26:06
9+
*/
10+
public int firstMissingPositive(int[] nums) {
11+
int n = nums.length;
12+
for (int i = 0; i < n; i++) {
13+
// 把非正数变成正数
14+
if (nums[i] <= 0) {
15+
nums[i] = n + 1;
16+
}
17+
}
18+
for (int i = 0; i < n; i++) {
19+
// 把当前坐标元素指向的坐标上的数字变成负数
20+
int num = Math.abs(nums[i]);
21+
if (num <= n) {
22+
nums[num - 1] = -Math.abs(nums[num - 1]);
23+
}
24+
}
25+
for (int i = 0; i < n; i++) {
26+
// 出现正数的地方,就是遗漏的值
27+
if (0 < nums[i]) {
28+
return i + 1;
29+
}
30+
}
31+
return n + 1;
32+
}
33+
// end::answer[]
34+
}

0 commit comments

Comments
 (0)