Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 126c71b

Browse files
committed
更新题解列表
1 parent 59d86b7 commit 126c71b

File tree

3 files changed

+98
-30
lines changed

3 files changed

+98
-30
lines changed

‎Solutions/0001. 两数之和.md

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,42 @@
55

66
## 题目大意
77

8-
描述:给定一个整数数组 `nums` 和一个整数目标值 `target`
8+
**描述**:给定一个整数数组 `nums` 和一个整数目标值 `target`
99

10-
要求:在该数组中找出和为 `target` 的两个整数,并输出这两个整数的下标。
10+
**要求**:在该数组中找出和为 `target` 的两个整数,并输出这两个整数的下标。可以按任意顺序返回答案
1111

12-
## 解题思路
12+
**说明**:
1313

14-
### 思路 1:枚举算法
14+
- 2ドル \le nums.length \le 10^4$。
15+
- $-10^9 \le nums[i] \le 10^9$。
16+
- $-10^9 \le target \le 10^9$。
17+
- 只会存在一个有效答案。
1518

16-
最简单的思路是枚举算法。使用两重循环枚举数组中每一个数 `nums[i]``nums[j]`。判断所有的 `nums[i] + nums[j]` 是否等于 `target`
19+
**示例**:
1720

18-
- 如果出现 `nums[i] + nums[j] == target`,则说明数组中存在和为 `target` 的两个整数,将两个整数的下标 `i``j` 输出即可。
21+
- 示例 1:
1922

20-
利用两重循环进行枚举的时间复杂度为 $O(n^2)$。
23+
```Python
24+
输入:nums = [2,7,11,15], target = 9
25+
输出:[0,1]
26+
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
27+
```
2128

22-
### 思路 2:哈希表
29+
- 示例 2:
2330

24-
另一种思路是利用哈希表。哈希表中键值对信息为 `target-nums[i] :i``i` 为下标。
31+
```Python
32+
输入:nums = [3,2,4], target = 6
33+
输出:[1,2]
34+
```
2535

26-
- 遍历数组,对于每一个数 `nums[i]`:
27-
- 先查找字典中是否存在 `target - nums[i]`,存在则输出 `target - nums[i]` 对应的下标和当前数组的下标 `i`
28-
- 不存在则在字典中存入 `target-nums[i]` 的下标 `i`
36+
## 解题思路
2937

30-
利用哈希表求解的时间复杂度为 $O(n)$。
38+
### 思路 1:枚举算法
3139

32-
## 代码
40+
1. 使用两重循环枚举数组中每一个数 `nums[i]``nums[j]`,判断所有的 `nums[i] + nums[j]` 是否等于 `target`
41+
2. 如果出现 `nums[i] + nums[j] == target`,则说明数组中存在和为 `target` 的两个整数,将两个整数的下标 `i``j` 输出即可。
3342

34-
### 思路 1 代码:
43+
### 思路 1:代码
3544

3645
```Python
3746
class Solution:
@@ -43,7 +52,20 @@ class Solution:
4352
return []
4453
```
4554

46-
### 思路 2 代码:
55+
### 思路 1:复杂度分析
56+
57+
- **时间复杂度**:$O(n^2)$
58+
- **空间复杂度**:$O(1)$。
59+
60+
### 思路 2:哈希表
61+
62+
哈希表中键值对信息为 `target-nums[i] :i``i` 为下标。
63+
64+
1. 遍历数组,对于每一个数 `nums[i]`:
65+
1. 先查找字典中是否存在 `target - nums[i]`,存在则输出 `target - nums[i]` 对应的下标和当前数组的下标 `i`
66+
2. 不存在则在字典中存入 `target-nums[i]` 的下标 `i`
67+
68+
### 思路 2:代码
4769

4870
```Python
4971
def twoSum(self, nums: List[int], target: int) -> List[int]:
@@ -55,3 +77,7 @@ def twoSum(self, nums: List[int], target: int) -> List[int]:
5577
return [0]
5678
```
5779

80+
### 思路 2:复杂度分析
81+
82+
- **时间复杂度**:$O(n),ドル其中 $n$ 是数组 `nums` 的元素数量。
83+
- **空间复杂度**:$O(n)$。

‎Solutions/0041. 缺失的第一个正数.md

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55

66
## 题目大意
77

8-
**描述**:给定一个未排序的整数数组 `nums` ,
8+
**描述**:给定一个未排序的整数数组 `nums`
99

10-
**要求**:找出其中没有出现的最小的正整数。要求实现时间复杂度为 `O(n)` 并且只使用常数级别额外空间的解决方案。
10+
**要求**:找出其中没有出现的最小的正整数。
1111

1212
**说明**:
1313

1414
- 1ドル \le nums.length \le 5 * 10^5$。
1515
- $-2^{31} \le nums[i] \le 2^{31} - 1$。
16+
- 要求实现时间复杂度为 `O(n)` 并且只使用常数级别额外空间的解决方案。
1617

1718
**示例**:
1819

@@ -23,6 +24,13 @@
2324
输出:3
2425
```
2526

27+
- 示例 2:
28+
29+
```Python
30+
输入:nums = [3,4,-1,1]
31+
输出:2
32+
```
33+
2634
## 解题思路
2735

2836
### 思路 1:哈希表、原地哈希
@@ -36,7 +44,7 @@
3644
3. 如果遍历完没有在数组中找到缺失的第一个正数,则缺失的第一个正数是 `n + 1`
3745
4. 最后返回我们找到的缺失的第一个正数。
3846

39-
### 思路 1:哈希表、原地哈希代码
47+
### 思路 1:代码
4048

4149
```Python
4250
class Solution:
@@ -54,3 +62,8 @@ class Solution:
5462
return i + 1
5563
return size + 1
5664
```
65+
66+
### 思路 1:复杂度分析
67+
68+
- **时间复杂度**:$O(n),ドル其中 $n$ 为数组 `nums` 的元素个数。
69+
- **空间复杂度**:$O(1)$。

‎Solutions/0042. 接雨水.md

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,48 @@
55

66
## 题目大意
77

8-
给定 `n` 个非负整数表示每个宽度为 `1` 的柱子的高度图,用数组 `height` 表示,其中 `height[i]` 表示第 `i` 根柱子的高度。
8+
**描述**:给定 `n` 个非负整数表示每个宽度为 `1` 的柱子的高度图,用数组 `height` 表示,其中 `height[i]` 表示第 `i` 根柱子的高度。
99

10-
要求:计算按此排列的柱子,下雨之后能接多少雨水。
10+
**要求**:计算按此排列的柱子,下雨之后能接多少雨水。
11+
12+
**说明**:
13+
14+
- $n == height.length$。
15+
- 1ドル \le n \le 2 * 10^4$。
16+
- 0ドル \le height[i] \le 10^5$。
17+
18+
**示例**:
19+
20+
- 示例 1:
21+
22+
![](https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/10/22/rainwatertrap.png)
23+
24+
```Python
25+
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
26+
输出:6
27+
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
28+
```
29+
30+
- 示例 2:
31+
32+
```Python
33+
输入:height = [4,2,0,3,2,5]
34+
输出:9
35+
```
1136

1237
## 解题思路
1338

14-
讲解一下使用单调栈的解法。
39+
### 思路 1:单调栈
1540

16-
- 遍历高度数组 `height`
17-
- 如果当前柱体高度较小,小于等于栈顶柱体的高度,则将当前柱子高度入栈。
18-
- 如果当前柱体高度较大,大于栈顶柱体的高度,则一直出栈,直到当前柱体小于等于栈顶柱体的高度。
19-
- 假设当前柱体为 `C`,出栈柱体为 `B`,出栈之后新的栈顶柱体为 `A`。则说明:
20-
- 当前柱体 `C` 是出栈柱体 `B` 向右找到的第一个大于当前柱体高度的柱体,那么以出栈柱体 `B` 为中心,可以向右将宽度扩展到当前柱体 `C`
21-
- 新的栈顶柱体 `A` 是出栈柱体 `B` 向左找到的第一个大于当前柱体高度的柱体,那么以出栈柱体 `B` 为中心,可以向左将宽度扩展到当前柱体 `A`
22-
- 出栈后,以新的栈顶柱体 `A` 为左边界,以当前柱体 `C` 为右边界,以左右边界与出栈柱体 `B` 的高度差为深度,计算可以接到雨水的面积。然后记录并更新累积面积。
41+
1. 遍历高度数组 `height`
42+
2. 如果当前柱体高度较小,小于等于栈顶柱体的高度,则将当前柱子高度入栈。
43+
3. 如果当前柱体高度较大,大于栈顶柱体的高度,则一直出栈,直到当前柱体小于等于栈顶柱体的高度。
44+
4. 假设当前柱体为 `C`,出栈柱体为 `B`,出栈之后新的栈顶柱体为 `A`。则说明:
45+
1. 当前柱体 `C` 是出栈柱体 `B` 向右找到的第一个大于当前柱体高度的柱体,那么以出栈柱体 `B` 为中心,可以向右将宽度扩展到当前柱体 `C`
46+
2. 新的栈顶柱体 `A` 是出栈柱体 `B` 向左找到的第一个大于当前柱体高度的柱体,那么以出栈柱体 `B` 为中心,可以向左将宽度扩展到当前柱体 `A`
47+
5. 出栈后,以新的栈顶柱体 `A` 为左边界,以当前柱体 `C` 为右边界,以左右边界与出栈柱体 `B` 的高度差为深度,计算可以接到雨水的面积。然后记录并更新累积面积。
2348

24-
##代码
49+
### 思路 1:代码
2550

2651
```Python
2752
class Solution:
@@ -43,3 +68,7 @@ class Solution:
4368
return ans
4469
```
4570

71+
### 思路 1:复杂度分析
72+
73+
- **时间复杂度**:$O(n),ドル其中 $n$ 是数组 `height` 的长度。
74+
- **空间复杂度**:$O(n)$。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /