Skip to content

Commit 84b244c

Browse files
committed
update
1 parent 0e3f60b commit 84b244c

12 files changed

Lines changed: 153 additions & 141 deletions

Algorithm/10.跳跃游戏II.md

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,31 @@
66

77
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]
88

9-
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
9+
每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
1010

11-
0 <= j <= nums[i]
12-
i + j < n
11+
- 0 <= j <= nums[i]
12+
- i + j < n
1313
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]
1414

1515

1616

1717
示例 1:
1818

19-
输入: nums = [2,3,1,1,4]
20-
输出: 2
21-
解释: 跳到最后一个位置的最小跳跃数是 2。
22-
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
23-
示例 2:
19+
- 输入: nums = [2,3,1,1,4]
20+
- 输出: 2
21+
- 解释: 跳到最后一个位置的最小跳跃数是 2。
22+
- 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
2423

25-
输入: nums = [2,3,0,1,4]
26-
输出: 2
24+
示例 2:
25+
26+
- 输入: nums = [2,3,0,1,4]
27+
- 输出: 2
2728

2829

2930
### 思路
3031

3132

32-
贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。
33+
贪心的思路,局部最优:当前可移动距离尽可能多走,如果还没到终点,步数再加一。整体最优:一步尽可能多走,从而达到最少步数。
3334

3435
所以真正解题的时候,要从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数!
3536

Algorithm/11.H指数.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,17 @@
1010

1111

1212

13-
示例 1
13+
示例 1:
1414

15-
输入:citations = [3,0,6,1,5]
16-
输出:3
17-
解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
18-
由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。
19-
示例 2:
15+
- 输入:citations = [3,0,6,1,5]
16+
- 输出:3
17+
- 解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
18+
- 由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。
2019

21-
输入:citations = [1,3,1]
22-
输出:1
20+
示例 2:
21+
22+
- 输入:citations = [1,3,1]
23+
- 输出:1
2324

2425
### 思路
2526

@@ -67,7 +68,7 @@ public int hIndex(int[] citations) {
6768

6869
最终的时间复杂度与排序算法的时间复杂度有关
6970

70-
复杂度分析
71+
复杂度分析:
7172

7273
- 时间复杂度:O(nlogn),其中 n 为数组 citations 的长度。即为排序的时间复杂度。
7374

@@ -123,18 +124,18 @@ public class Solution {
123124
}
124125
```
125126

126-
复杂度分析
127+
复杂度分析:
127128

128-
时间复杂度:O(n),其中 n 为数组 citations 的长度。需要遍历数组 citations 一次,以及遍历长度为 n+1 的数组 counter 一次。
129+
- 时间复杂度:O(n),其中 n 为数组 citations 的长度。需要遍历数组 citations 一次,以及遍历长度为 n+1 的数组 counter 一次。
129130

130-
空间复杂度:O(n),其中 n 为数组 citations 的长度。需要创建长度为 n+1 的数组 counter。
131+
- 空间复杂度:O(n),其中 n 为数组 citations 的长度。需要创建长度为 n+1 的数组 counter。
131132

132133

133134
##### 方法三:二分法
134135

135136
所谓的 h 指数是指一个具体的数值,该数值为“最大”的满足「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」定义的合法数,重点是“最大”。
136137

137-
给定所有论文的引用次数情况为[3,0,6,1,5],可统计满足定义的数值有哪些
138+
给定所有论文的引用次数情况为[3,0,6,1,5],可统计满足定义的数值有哪些:
138139

139140
```
140141
h=0,含义为「至少发表了 0 篇,且这 0 篇论文至少被引用 0 次」,空集即满足,恒成立;
@@ -215,10 +216,10 @@ class Solution {
215216

216217

217218

218-
复杂度分析
219+
复杂度分析:
219220

220-
时间复杂度:O(nlogn),其中 n 为数组 citations 的长度。需要进行 logn 次二分搜索,每次二分搜索需要遍历数组 citations 一次。
221-
空间复杂度:O(1),只需要常数个变量来进行二分搜索。
221+
- 时间复杂度:O(nlogn),其中 n 为数组 citations 的长度。需要进行 logn 次二分搜索,每次二分搜索需要遍历数组 citations 一次。
222+
- 空间复杂度:O(1),只需要常数个变量来进行二分搜索。
222223

223224

224225

Algorithm/12.O(1) 时间插入、删除和获取随机元素.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,25 @@
44

55
### 题目
66

7-
实现RandomizedSet 类:
7+
实现RandomizedSet类:
8+
9+
- RandomizedSet() 初始化 RandomizedSet 对象
10+
- bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
11+
- bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
12+
- int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
813

9-
RandomizedSet() 初始化 RandomizedSet 对象
10-
bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。
11-
bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。
12-
int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。
1314
你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为 O(1) 。
1415

1516

1617

17-
示例
18+
示例:
1819

19-
输入
20-
["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
21-
[[], [1], [2], [2], [], [1], [2], []]
22-
输出
23-
[null, true, false, true, 2, true, false, 2]
20+
- 输入["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
21+
- [[], [1], [2], [2], [], [1], [2], []]
22+
- 输出[null, true, false, true, 2, true, false, 2]
2423

25-
解释
24+
解释:
25+
```
2626
RandomizedSet randomizedSet = new RandomizedSet();
2727
randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。
2828
randomizedSet.remove(2); // 返回 false ,表示集合中不存在 2 。
@@ -31,7 +31,7 @@ randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。
3131
randomizedSet.remove(1); // 从集合中移除 1 ,返回 true 。集合现在包含 [2] 。
3232
randomizedSet.insert(2); // 2 已在集合中,所以返回 false 。
3333
randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字,getRandom 总是返回 2 。
34-
34+
```
3535

3636
提示:
3737

Algorithm/13.除自身以外数组的乘积.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,23 @@
44

55
### 题目
66

7-
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
7+
给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积
88

9-
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
9+
题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。
1010

11-
不要使用除法,且在 O(n) 时间复杂度内完成此题。
11+
***不要使用除法***,且在O(n)时间复杂度内完成此题。
1212

1313

1414

15-
示例 1:
15+
示例 1:
1616

17-
输入: nums = [1,2,3,4]
18-
输出: [24,12,8,6]
19-
示例 2:
17+
- 输入: nums = [1,2,3,4]
18+
- 输出: [24,12,8,6]
2019

21-
输入: nums = [-1,1,0,-3,3]
22-
输出: [0,0,9,0,0]
20+
示例 2:
21+
22+
- 输入: nums = [-1,1,0,-3,3]
23+
- 输出: [0,0,9,0,0]
2324

2425

2526
提示:

Algorithm/14.加油站.md

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,40 @@
1212

1313

1414

15-
示例 1:
16-
17-
输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
18-
输出: 3
19-
解释:
20-
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
21-
开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
22-
开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
23-
开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
24-
开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
25-
开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
15+
示例 1:
16+
17+
- 输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
18+
- 输出: 3
19+
- 解释:
20+
- 从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油
21+
- 开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油
22+
- 开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油
23+
- 开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油
24+
- 开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油
25+
- 开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
26+
2627
因此,3 可为起始索引。
27-
示例 2:
28-
29-
输入: gas = [2,3,4], cost = [3,4,3]
30-
输出: -1
31-
解释:
32-
你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
33-
我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
34-
开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
35-
开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
36-
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
28+
29+
示例 2:
30+
31+
- 输入: gas = [2,3,4], cost = [3,4,3]
32+
- 输出: -1
33+
- 解释:
34+
- 你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。
35+
- 我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油
36+
- 开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油
37+
- 开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油
38+
- 你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
39+
3740
因此,无论怎样,你都不可能绕环路行驶一周。
3841

3942

40-
提示:
43+
提示:
4144

42-
n == gas.length == cost.length
43-
1 <= n <= 105
44-
0 <= gas[i], cost[i] <= 104
45-
输入保证答案唯一。
45+
- n == gas.length == cost.length
46+
- 1 <= n <= 105
47+
- 0 <= gas[i], cost[i] <= 104
48+
- 输入保证答案唯一。
4649

4750
### 思路
4851

Algorithm/15.分发糖果.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44

55
### 题目
66

7-
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
8-
9-
你需要按照以下要求,给这些孩子分发糖果
7+
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
8+
9+
你需要按照以下要求,给这些孩子分发糖果:
1010

11-
每个孩子至少分配到 1 个糖果。
12-
相邻两个孩子评分更高的孩子会获得更多的糖果。
13-
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
11+
- 每个孩子至少分配到 1 个糖果。
12+
- 相邻两个孩子评分更高的孩子会获得更多的糖果。
13+
- 请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
1414

1515

1616

17-
示例 1:
17+
示例 1:
1818

1919
- 输入:ratings = [1,0,2]
2020
- 输出:5
@@ -28,7 +28,7 @@ n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的
2828
第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。
2929

3030

31-
提示
31+
提示:
3232

3333
- n == ratings.length
3434
- 1 <= n <= 2 * 104

Algorithm/16.接雨水.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66

77
给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
88

9-
示例 1
9+
示例 1:
1010

1111
![image](https://raw.githubusercontent.com/CharonChui/Pictures/master/rainwatertrap_1.png?raw=true)
1212

13-
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
14-
输出:6
15-
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
16-
示例 2:
13+
- 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
14+
- 输出:6
15+
- 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
1716

18-
输入:height = [4,2,0,3,2,5]
19-
输出:9
17+
示例 2:
18+
19+
- 输入:height = [4,2,0,3,2,5]
20+
- 输出:9
2021

2122

2223
### 思路

Algorithm/5.多数元素.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111

1212
数组中出现次数超过一半的数字被称为众数。
1313

14-
示例 1
14+
示例 1:
1515

16-
输入:nums = [3,2,3]
17-
输出:3
18-
示例 2:
16+
- 输入:nums = [3,2,3]
17+
- 输出:3
1918

20-
输入:nums = [2,2,1,1,1,2,2]
21-
输出:2
19+
示例 2:
20+
21+
- 输入:nums = [2,2,1,1,1,2,2]
22+
- 输出:2
2223

2324

2425

Algorithm/6.轮转数组.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,25 @@
77
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
88

99

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

12-
输入: nums = [1,2,3,4,5,6,7], k = 3
13-
输出: [5,6,7,1,2,3,4]
14-
解释:
15-
向右轮转 1 步: [7,1,2,3,4,5,6]
16-
向右轮转 2 步: [6,7,1,2,3,4,5]
17-
向右轮转 3 步: [5,6,7,1,2,3,4]
18-
示例 2:
12+
- 输入: nums = [1,2,3,4,5,6,7], k = 3
13+
- 输出: [5,6,7,1,2,3,4]
1914

20-
输入:nums = [-1,-100,3,99], k = 2
21-
输出:[3,99,-1,-100]
22-
解释:
23-
向右轮转 1 步: [99,-1,-100,3]
24-
向右轮转 2 步: [3,99,-1,-100]
15+
解释:
16+
- 向右轮转 1 步: [7,1,2,3,4,5,6]
17+
- 向右轮转 2 步: [6,7,1,2,3,4,5]
18+
- 向右轮转 3 步: [5,6,7,1,2,3,4]
19+
20+
示例 2:
21+
22+
- 输入:nums = [-1,-100,3,99], k = 2
23+
- 输出:[3,99,-1,-100]
24+
25+
解释:
26+
27+
- 向右轮转 1 步: [99,-1,-100,3]
28+
- 向右轮转 2 步: [3,99,-1,-100]
2529

2630

2731

@@ -77,9 +81,6 @@ class Solution:
7781
```
7882

7983

80-
81-
82-
8384
---
8485
- 邮箱 :charon.chui@gmail.com
8586
- Good Luck!

0 commit comments

Comments
 (0)