Skip to content

Commit 4183e9f

Browse files
committed
一刷164
1 parent 9436ba8 commit 4183e9f

File tree

6 files changed

+121
-30
lines changed

6 files changed

+121
-30
lines changed

README.adoc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,13 +1173,13 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
11731173
//|{doc_base_url}/0163-missing-ranges.adoc[题解]
11741174
//|Medium
11751175
//|
1176-
//
1177-
//|{counter:codes}
1178-
//|{leetcode_base_url}/maximum-gap/[164. Maximum Gap^]
1179-
//|{source_base_url}/_0164_MaximumGap.java[Java]
1180-
//|{doc_base_url}/0164-maximum-gap.adoc[题解]
1181-
//|Hard
1182-
//|
1176+
1177+
|{counter:codes}
1178+
|{leetcode_base_url}/maximum-gap/[164. Maximum Gap^]
1179+
|{source_base_url}/_0164_MaximumGap.java[Java]
1180+
|{doc_base_url}/0164-maximum-gap.adoc[题解]
1181+
|Hard
1182+
|
11831183

11841184
|{counter:codes}
11851185
|{leetcode_base_url}/compare-version-numbers/[165. Compare Version Numbers^]

docs/0164-maximum-gap.adoc

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,65 @@
11
[#0164-maximum-gap]
2-
= 164. Maximum Gap
2+
= 164. 最大间距
33

4-
{leetcode}/problems/maximum-gap/[LeetCode - Maximum Gap^]
4+
https://leetcode.cn/problems/maximum-gap/[LeetCode - 164. 最大间距 ^]
55

6-
Given an unsorted array, find the maximum difference between the successive elements in its sorted form.
6+
给定一个无序的数组 `nums`,返回 _数组在排序之后,相邻元素之间最大的差值_。如果数组元素个数小于 2,则返回 `0`
77

8-
Return 0 if the array contains less than 2 elements.
8+
您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。
99

10-
*Example 1:*
10+
*示例 1:*
1111

12-
[subs="verbatim,quotes,macros"]
13-
----
14-
*Input:* [3,6,9,1]
15-
*Output:* 3
16-
*Explanation:* The sorted form of the array is [1,3,6,9], either
17-
(3,6) or (6,9) has the maximum difference 3.
18-
----
12+
....
13+
输入: nums = [3,6,9,1]
14+
输出: 3
15+
解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
16+
....
1917

20-
*Example 2:*
18+
*示例 2:*
2119

22-
[subs="verbatim,quotes,macros"]
23-
----
24-
*Input:* [10]
25-
*Output:* 0
26-
*Explanation:* The array contains less than 2 elements, therefore return 0.
27-
----
20+
....
21+
输入: nums = [10]
22+
输出: 0
23+
解释: 数组元素个数小于 2,因此返回 0。
24+
....
2825

29-
*Note:*
26+
*提示:*
3027

28+
* `1 \<= nums.length \<= 10^5^`
29+
* `0 \<= nums[i] \<= 10^9^`
3130
32-
* You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
33-
* Try to solve it in linear time/space.
3431
32+
== 思路分析
3533

34+
使用比特位表示每个数字!这样统计每个比特位之间的差值即可。
3635

36+
使用比特位并不是最优解,内存消耗可能比较大。看题解,应该使用基数排序。抽空学习一下!
3737

3838
[[src-0164]]
39+
[tabs]
40+
====
41+
一刷::
42+
+
43+
--
3944
[{java_src_attr}]
4045
----
4146
include::{sourcedir}/_0164_MaximumGap.java[tag=answer]
4247
----
48+
--
49+
50+
// 二刷::
51+
// +
52+
// --
53+
// [{java_src_attr}]
54+
// ----
55+
// include::{sourcedir}/_0164_MaximumGap_2.java[tag=answer]
56+
// ----
57+
// --
58+
====
59+
60+
61+
== 参考资料
62+
63+
64+
4365

docs/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ include::0162-find-peak-element.adoc[leveloffset=+1]
411411

412412
// include::0163-missing-ranges.adoc[leveloffset=+1]
413413

414-
// include::0164-maximum-gap.adoc[leveloffset=+1]
414+
include::0164-maximum-gap.adoc[leveloffset=+1]
415415

416416
include::0165-compare-version-numbers.adoc[leveloffset=+1]
417417

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,11 @@ endif::[]
10831083
|{doc_base_url}/0174-dungeon-game.adoc[题解]
10841084
|✅ 动态规划!从终点向起始位置反推。遇到正数就直接加,遇到负数则先看看上一步的最大值是正数还是负数,是负数则需要累加,是正数则舍弃,直接从当前位置的负数算起。
10851085

1086+
|{counter:codes2503}
1087+
|{leetcode_base_url}/maximum-gap/[164. 最大间距^]
1088+
|{doc_base_url}/0164-maximum-gap.adoc[题解]
1089+
|✅ 使用比特位表示每个数字!这样统计每个比特位之间的差值即可。更优解是基数排序,抽空学习一下。
1090+
10861091
|===
10871092

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

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public class _0162_FindPeakElement {
4949
* Memory Usage: 38.4 MB, less than 100.00% of Java online submissions for Find Peak Element.
5050
*
5151
* Copy form: https://leetcode.com/problems/find-peak-element/solution/[Find Peak Element solution - LeetCode]
52+
*
53+
* @author D瓜哥 · https://www.diguage.com
54+
* @since 2020-01-05 11:03
5255
*/
5356
public int findPeakElement(int[] nums) {
5457
return search(nums, 0, nums.length - 1);
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.Arrays;
4+
5+
public class _0164_MaximumGap {
6+
// tag::answer[]
7+
/**
8+
* @author D瓜哥 · https://www.diguage.com
9+
* @since 2025-06-29 11:13:03
10+
*/
11+
public int maximumGap(int[] nums) {
12+
int max = Arrays.stream(nums).max().orElse(0);
13+
long[] bits = new long[max / 64 + 1];
14+
for (int num : nums) {
15+
int index = num / 64;
16+
int step = num % 64;
17+
bits[index] = bits[index] | (1L << step);
18+
}
19+
int result = 0;
20+
int pre = -1;
21+
for (int i = 0; i < bits.length; i++) {
22+
long bit = bits[i];
23+
if (bit == 0) {
24+
continue;
25+
}
26+
int step = 0;
27+
int start = i * 64;
28+
while (bit != 0) {
29+
if ((bit & 1) == 1) {
30+
if (pre == -1) {
31+
pre = start + step;
32+
} else {
33+
int next = start + step;
34+
result = Math.max(result, next - pre);
35+
pre = next;
36+
}
37+
}
38+
step++;
39+
// 注意:这里要使用 >>> 无符号右移
40+
bit >>>= 1;
41+
}
42+
43+
}
44+
return result;
45+
}
46+
47+
// // 最简单的写法
48+
// public int maximumGap(int[] nums) {
49+
// Arrays.sort(nums);
50+
// int result = 0;
51+
// for (int i = 1; i < nums.length; i++) {
52+
// result = Math.max(result, nums[i] - nums[i - 1]);
53+
// }
54+
// return result;
55+
// }
56+
57+
// end::answer[]
58+
public static void main(String[] args) {
59+
new _0164_MaximumGap().maximumGap(new int[]{2, 99999999});
60+
}
61+
}

0 commit comments

Comments
 (0)