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 cf32c19

Browse files
committed
修正内容错误
1 parent 3706803 commit cf32c19

File tree

9 files changed

+35
-36
lines changed

9 files changed

+35
-36
lines changed

‎docs/00_preface/00_06_categories_list.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,3 +1094,4 @@
10941094
| [1377. T 秒后青蛙的位置](https://leetcode.cn/problems/frog-position-after-t-seconds/) | [题解](https://github.com/ITCharge/AlgoNote/tree/main/docs/solutions/1300-1399/frog-position-after-t-seconds.md) | 树、深度优先搜索、广度优先搜索、图 | 困难 |
10951095
| [LCR 185. 统计结果概率](https://leetcode.cn/problems/nge-tou-zi-de-dian-shu-lcof/) | [题解](https://github.com/ITCharge/AlgoNote/tree/main/docs/solutions/LCR/nge-tou-zi-de-dian-shu-lcof.md) | 数学、动态规划、概率与统计 | 中等 |
10961096

1097+

‎docs/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<a href="https://github.com/ITCharge/AlgoNote">
1414
<img src="https://qcdn.itcharge.cn/images/btn_github_link.svg" width="145" alt="GitHub 仓库"></a>
1515
</div>
16+
1617
## 1. 本书简介
1718

1819
本书不仅仅只是一本算法题解书,更是一本算法与数据结构基础知识的讲解书。

‎docs/solutions/0001-0099/jump-game.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
而前面的位置 $j$ 肯定也是通过 $j$ 前面的点到达的。所以我们可以通过贪心算法来计算出所能到达的最远位置。具体步骤如下:
4646

4747
1. 初始化能到达的最远位置 $max_i$ 为 0ドル$。
48-
2. 遍历数组 `nums`
48+
2. 遍历数组 $nums$
4949
3. 如果能到达当前位置,即 $max_i \le i,ドル并且当前位置 + 当前位置最大跳跃长度 > 能到达的最远位置,即 $i + nums[i] > max_i,ドル则更新能到达的最远位置 $max_i$。
50-
4. 遍历完数组,最后比较能到达的最远位置 $max_i$ 和数组最远距离 `size - 1` 的关系。如果 $max_i >= len(nums),ドル则返回 `True`,否则返回 `False`
50+
4. 遍历完数组,最后比较能到达的最远位置 $max_i$ 和数组最远距离 $size - 1$ 的关系。如果 $max_i >= size - 1,ドル则返回 `True`,否则返回 `False`
5151

5252
### 思路 1:代码
5353

@@ -66,7 +66,7 @@ class Solution:
6666
### 思路 1:复杂度分析
6767

6868
- **时间复杂度**:$O(n),ドル其中 $n$ 是数组 `nums` 的长度。
69-
- **空间复杂度**:
69+
- **空间复杂度**:$O(1)$。
7070

7171
### 思路 2:动态规划
7272

@@ -76,7 +76,7 @@ class Solution:
7676

7777
###### 2. 定义状态
7878

79-
定义状态 `dp[i]` 表示为:从位置 0ドル$ 出发,经过 $j \le i,ドル可以跳出的最远距离。
79+
定义状态 $dp[i]$ 表示为:从位置 0ドル$ 出发,经过 $j \le i,ドル可以跳出的最远距离。
8080

8181
###### 3. 状态转移方程
8282

@@ -85,11 +85,11 @@ class Solution:
8585

8686
###### 4. 初始条件
8787

88-
初始状态下,从 0ドル$ 出发,经过 0ドル,ドル可以跳出的最远距离为 `nums[0]`,即 `dp[0] = nums[0]`
88+
初始状态下,从 0ドル$ 出发,经过 0ドル,ドル可以跳出的最远距离为 $nums[0]$,即 $dp[0] = nums[0]$
8989

9090
###### 5. 最终结果
9191

92-
根据我们之前定义的状态,`dp[i]` 表示为:从位置 0ドル$ 出发,经过 $j \le i,ドル可以跳出的最远距离。则我们需要判断 `dp[size - 1]` 与数组最远距离 `size - 1` 的关系。
92+
根据我们之前定义的状态,$dp[i]$ 表示为:从位置 0ドル$ 出发,经过 $j \le i,ドル可以跳出的最远距离。则我们需要判断 $dp[size - 1]$ 与数组最远距离 $size - 1$ 的关系。
9393

9494
### 思路 2:代码
9595

‎docs/solutions/0100-0199/candy.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858

5959
根据以上信息,我们可以设定一个长度为 N 的数组 sweets 来表示每个孩子分得的最少糖果数,初始每个孩子分得糖果数都为 1。
6060

61-
然后遍历两遍数组,第一遍遍历满足当 $ratings[i - 1] < ratings[i]$ 时,第 $i$ 个孩子的糖果数量比第 $i - 1$ 个孩子的糖果数量多 1ドル$ 个。第二遍遍历满足当 $ratings[i] > ratings[i + 1]$ 时,第 $i$ 个孩子的糖果数量取「第 $i + 1$ 个孩子的糖果数量多 1ドル$ 个」和「第 $i + 1$ 个孩子目前拥有的糖果数量」中的最大值。
61+
然后遍历两遍数组,第一遍遍历满足当 $ratings[i - 1] < ratings[i]$ 时,第 $i$ 个孩子的糖果数量比第 $i - 1$ 个孩子的糖果数量多 1ドル$ 个。第二遍遍历满足当 $ratings[i] > ratings[i + 1]$ 时,第 $i$ 个孩子的糖果数量取「第 $i$ 个孩子目前拥有的糖果数量」和「第 $i + 1$ 个孩子的糖果数量加 1ドル$」中的最大值。
6262

6363
然后再遍历求所有孩子的糖果数量和即为答案。
6464

‎docs/solutions/0300-0399/coin-change.md‎

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ class Solution:
7070
cur = queue.popleft()
7171
for coin in coins:
7272
if cur == coin:
73-
step += 1
7473
return step
7574
elif cur > coin and cur - coin not in visited:
7675
queue.append(cur - coin)
@@ -100,42 +99,39 @@ class Solution:
10099

101100
###### 3. 状态转移方程
102101

103-
$dp[c] = \begin{cases} dp[c] & c < coins[i - 1] \cr min \lbrace dp[c], dp[c - coins[i - 1]]+ 1 \rbrace & c \ge coins[i - 1] \end{cases}$
102+
$dp[c] = min(dp[c], dp[c - coin]+ 1)$
104103

105-
1. 当 $c < coins[i - 1]$ 时:
106-
1. 不使用第 $i - 1$ 枚硬币,只使用前 $i - 1$ 枚硬币凑成金额 $w$ 的最少硬币数量,即 $dp[c]$。
107-
2. 当 $c \ge coins[i - 1]$ 时,取下面两种情况中的较小值:
108-
1. 不使用第 $i - 1$ 枚硬币,只使用前 $i - 1$ 枚硬币凑成金额 $w$ 的最少硬币数量,即 $dp[c]$。
109-
2. 凑成金额 $c - coins[i - 1]$ 的最少硬币数量,再加上当前硬币的数量 1ドル,ドル即 $dp[c - coins[i - 1]] + 1$。
104+
对于每种硬币 $coin,ドル当 $c \ge coin$ 时,取下面两种情况中的较小值:
105+
1. 不使用当前硬币,只使用之前硬币凑成金额 $c$ 的最少硬币数量,即 $dp[c]$。
106+
2. 凑成金额 $c - coin$ 的最少硬币数量,再加上当前硬币的数量 1ドル,ドル即 $dp[c - coin] + 1$。
110107

111108
###### 4. 初始条件
112109

113110
- 凑成总金额为 0ドル$ 的最少硬币数量为 0ドル,ドル即 $dp[0] = 0$。
114-
- 默认情况下,在不使用硬币时,都不能恰好凑成总金额为 $w$ ,此时将状态值设置为一个极大值(比如 $n + 1$),表示无法凑成。
111+
- 默认情况下,在不使用硬币时,都不能恰好凑成总金额为 $c$,此时将状态值设置为一个极大值(比如 $+\infty$),表示无法凑成。
115112

116113
###### 5. 最终结果
117114

118115
根据我们之前定义的状态,$dp[c]$ 表示为:凑成总金额为 $c$ 的最少硬币数量。则最终结果为 $dp[amount]$。
119116

120-
1. 如果 $dp[amount] \ne amount + 1,ドル则说明: $dp[amount]$ 为凑成金额 $amount$ 的最少硬币数量,则返回 $dp[amount]$。
121-
2. 如果 $dp[amount] = amount + 1,ドル则说明:无法凑成金额 $amount,ドル则返回 $-1$。
117+
1. 如果 $dp[amount] \ne +\infty,ドル则说明: $dp[amount]$ 为凑成金额 $amount$ 的最少硬币数量,则返回 $dp[amount]$。
118+
2. 如果 $dp[amount] = +\infty,ドル则说明:无法凑成金额 $amount,ドル则返回 $-1$。
122119

123120
### 思路 2:代码
124121

125122
```python
126123
class Solution:
127124
def coinChange(self, coins: List[int], amount: int) -> int:
128-
size = len(coins)
129-
dp = [(amount + 1) for _ in range(amount + 1)]
125+
dp = [float('inf')] * (amount + 1)
130126
dp[0] = 0
131127

132-
# 枚举前 i 种物品
133-
for i in range(1, size +1):
128+
# 枚举每种硬币
129+
for coin in coins:
134130
# 正序枚举背包装载重量
135-
for c in range(coins[i -1], amount + 1):
136-
dp[c] = min(dp[c], dp[c - coins[i -1]] + 1)
131+
for c in range(coin, amount + 1):
132+
dp[c] = min(dp[c], dp[c - coin] + 1)
137133

138-
if dp[amount] != amount +1:
134+
if dp[amount] != float('inf'):
139135
return dp[amount]
140136
return -1
141137
```

‎docs/solutions/0300-0399/remove-duplicate-letters.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class Solution:
7272

7373
for ch in s:
7474
if ch not in stack:
75-
while stack and ch < stack[-1] and stack[-1] in letter_counts andletter_counts[stack[-1]] > 0:
75+
while stack and ch < stack[-1] and letter_counts[stack[-1]] > 0:
7676
stack.pop()
7777
stack.append(ch)
7878
letter_counts[ch] -= 1

‎docs/solutions/0400-0499/frog-jump.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
1. 外层循环遍历每一块石子 $i,ドル对于每一块石子 $i,ドル使用内层循环遍历石子 $i$ 之前所有的石子 $j$。
6262
2. 并计算出上一步所在石子 $j$ 到当前所在石子 $i$ 之间的距离为 $k$。
6363
3. 如果上一步所在石子 $j$ 通过上上一步以长度为 $k - 1$、$k$ 或者 $k + 1$ 的距离到达石子 $j,ドル那么当前步所在石子也可以通过 $k$ 的距离到达石子 $i$。即通过检查 $dp[j][k - 1]$、$dp[j][k]$、$dp[j][k + 1]$ 中是否至少有一个为真,即可判断 $dp[i][k]$ 是否为真。
64-
- 即:$dp[i][k] = dp[j][k - 1] \text{ or } dp[j][k] or dp[j][k + 1]$。
64+
- 即:$dp[i][k] = dp[j][k - 1] \lor dp[j][k] \lor dp[j][k + 1]$。
6565

6666
###### 4. 初始条件
6767

‎docs/solutions/0400-0499/max-consecutive-ones-ii.md‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,18 @@
3939

4040
### 思路 1:滑动窗口
4141

42-
暴力做法是尝试将每个位置的 0ドル$ 分别变为 1ドル,ドル然后统计最大连续 1ドル$ 的个数。但这样复杂度就太高了
42+
暴力解法是遍历数组,将每一个 0ドル$ 依次翻转为 1ドル,ドル并统计此时连续 1ドル$ 的最大个数,最终取最大值。但这种做法的时间复杂度较高,不够高效
4343

44-
我们可以使用滑动窗口来解决问题。保证滑动窗口内最多有 1ドル$ 个 0ドル$。具体做法如下:
44+
我们可以采用滑动窗口的方法来优化。核心思想是维护一个窗口,使得窗口内最多只包含 1ドル$ 个 0ドル$。具体步骤如下:
4545

46-
设定两个指针:$left$$right,ドル分别指向滑动窗口的左右边界,保证滑动窗口内最多有 1ドル$ 个 0ドル$。使用 $zero\_count$ 统计窗口内 1ドル$ 的个数。使用 $ans$ 记录答案
46+
设定两个指针$left$$right,ドル分别表示滑动窗口的左右边界。用 $zero\_count$ 统计当前窗口内 0ドル$ 的数量,用 $ans$ 记录最大连续 1ドル$ 的个数。
4747

48-
- 一开始,$left$、$right$ 都指向 0ドル$。
49-
- 如果 $nums[right] == 0,ドル则窗口内 1ドル$ 的个数加 1ドル$。
50-
- 如果该窗口中 1ドル$ 的个数多于 1ドル$ 个,即 $zero\_count > 1,ドル则不断右移 $left,ドル缩小滑动窗口长度,并更新窗口中 1ドル$ 的个数,直到 $zero\_count \le 1$。
51-
- 维护更新最大连续 1ドル$ 的个数。然后右移 $right,ドル直到 $right \ge len(nums)$ 结束。
52-
- 输出最大连续 1ドル$ 的个数。
48+
- 初始时,$left$ 和 $right$ 都指向数组起始位置 0ドル$。
49+
- 每次将 $right$ 向右移动一位,如果 $nums[right] == 0,ドル则 $zero\_count$ 加 1ドル$。
50+
- 当窗口内 0ドル$ 的数量超过 1ドル$(即 $zero\_count > 1$)时,不断右移 $left,ドル并在遇到 0ドル$ 时将 $zero\_count$ 减 1ドル,ドル直到窗口内至多只有 1ドル$ 个 0ドル$。
51+
- 每次更新 $ans,ドル取当前窗口长度 $right - left + 1$ 的最大值。
52+
- 重复上述过程,直到 $right$ 遍历完整个数组。
53+
- 最终返回 $ans$ 即为所求最大连续 1ドル$ 的个数。
5354

5455
### 思路 1:代码
5556

‎docs/solutions/0400-0499/split-array-largest-sum.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
## 题目大意
1111

12-
**描述**:给定一个非负整数数组 $nums$ 和一个整数 $k,ドル将数组分成 $m$ 个非空的连续子数组。
12+
**描述**:给定一个非负整数数组 $nums$ 和一个整数 $k,ドル将数组分成 $k$ 个非空的连续子数组。
1313

14-
**要求**:使 $m$ 个子数组各自和的最大值最小,并求出子数组各自和的最大值。
14+
**要求**:使 $k$ 个子数组各自和的最大值最小,并求出子数组各自和的最大值。
1515

1616
**说明**:
1717

0 commit comments

Comments
(0)

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