Skip to content

Commit d6d50ab

Browse files
committed
add 3136 3163
1 parent c0aca46 commit d6d50ab

File tree

17 files changed

+465
-62
lines changed

17 files changed

+465
-62
lines changed

src/.vuepress/sidebar.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,14 @@ export default sidebar({
620620
"2938"
621621
]
622622
},
623+
{
624+
"text": "3100-3199",
625+
"collapsible": true,
626+
"children": [
627+
"3136",
628+
"3163"
629+
]
630+
},
623631
{
624632
"text": "3300-3399",
625633
"collapsible": true,

src/offer2/jz_offer_II_083.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@
4949
#### 复杂度分析
5050

5151
- **时间复杂度**`O(n * n!)`,其中 `n``nums` 的长度。主要由递归调用栈的深度决定,递归深度(即排列的数量 `n!`)乘以每次操作的时间复杂度 `O(n)`,总时间复杂度为 `O(n * n!)`
52-
- **空间复杂度**`O(n)`(不包含结果数组使用的空间)递归调用栈的深度为 `n``used` 数组的大小为 `n`
52+
- **空间复杂度**`O(n * n!)`,空间复杂度主要由以下几个部分组成:
53+
- 结果数组`res` 用于存储所有生成的唯一排列,在最坏情况下(所有元素都不相同),生成的排列数为 `n!`,因此结果数组的空间复杂度为 `O(n * n!)`
54+
- 临时数组 `track`,在每个递归调用中,`track` 的最大长度为 `n`,因此其空间复杂度为 `O(n)`
55+
- 布尔数组 `used` 用于标记哪些元素已经被使用,大小为 `n`,因此占用 `O(n)` 的空间。
56+
- 综合考虑,最主要的空间复杂度来源于结果数组 `res`,因此整体空间复杂度为 `O(n * n!)`
5357

5458
## 代码
5559

src/offer2/jz_offer_II_084.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@
5555
- 在回溯过程中,每次递归都要遍历 `n` 个元素,递归树的每一层都要做选择;
5656
- 对于每一层的递归,最多需要处理 `n!` 种情况;
5757
- 因此总的时间复杂度是 `O(n * n!)`
58-
- **空间复杂度**`O(n)`(不包含结果数组使用的空间)递归调用栈的深度为 `n``used` 数组的大小为 `n`
58+
- **空间复杂度**`O(n * n!)`,空间复杂度主要由以下几个部分组成:
59+
- 结果数组`res` 用于存储所有生成的唯一排列,在最坏情况下(所有元素都不相同),生成的排列数为 `n!`,因此结果数组的空间复杂度为 `O(n * n!)`
60+
- 临时数组 `track`,在每个递归调用中,`track` 的最大长度为 `n`,因此其空间复杂度为 `O(n)`
61+
- 布尔数组 `used` 用于标记哪些元素已经被使用,大小为 `n`,因此占用 `O(n)` 的空间。
62+
- 综合考虑,最主要的空间复杂度来源于结果数组 `res`,因此整体空间复杂度为 `O(n * n!)`
5963

6064
## 代码
6165

src/plan/contest_list.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ headerDepth: 0
384384
| 题号 | 标题 | 题解 | 标签 | 难度 |
385385
| :------: | :------ | :------: | :------ | :------ |
386386
| 3162 | [优质数对的总数 I](https://leetcode.com/problems/find-the-number-of-good-pairs-i) | | [`数组`](/tag/array.md) [`哈希表`](/tag/hash-table.md) | <font color=#15bd66>Easy</font> |
387-
| 3163 | [压缩字符串 III](https://leetcode.com/problems/string-compression-iii) | | [`字符串`](/tag/string.md) | <font color=#ffb800>Medium</font> |
387+
| 3163 | [压缩字符串 III](https://leetcode.com/problems/string-compression-iii) | [[✓]](/problem/3163.md) | [`字符串`](/tag/string.md) | <font color=#ffb800>Medium</font> |
388388
| 3164 | [优质数对的总数 II](https://leetcode.com/problems/find-the-number-of-good-pairs-ii) | | [`数组`](/tag/array.md) [`哈希表`](/tag/hash-table.md) | <font color=#ffb800>Medium</font> |
389389
| 3165 | [不包含相邻元素的子序列的最大和](https://leetcode.com/problems/maximum-sum-of-subsequence-with-non-adjacent-elements) | | [`线段树`](/tag/segment-tree.md) [`数组`](/tag/array.md) [`分治`](/tag/divide-and-conquer.md) `1+` | <font color=#ff334b>Hard</font> |
390390

@@ -443,7 +443,7 @@ headerDepth: 0
443443
<!-- prettier-ignore -->
444444
| 题号 | 标题 | 题解 | 标签 | 难度 |
445445
| :------: | :------ | :------: | :------ | :------ |
446-
| 3136 | [有效单词](https://leetcode.com/problems/valid-word) | | [`字符串`](/tag/string.md) | <font color=#15bd66>Easy</font> |
446+
| 3136 | [有效单词](https://leetcode.com/problems/valid-word) | [[✓]](/problem/3136.md) | [`字符串`](/tag/string.md) | <font color=#15bd66>Easy</font> |
447447
| 3137 | [K 周期字符串需要的最少操作次数](https://leetcode.com/problems/minimum-number-of-operations-to-make-word-k-periodic) | | [`哈希表`](/tag/hash-table.md) [`字符串`](/tag/string.md) [`计数`](/tag/counting.md) | <font color=#ffb800>Medium</font> |
448448
| 3138 | [同位字符串连接的最小长度](https://leetcode.com/problems/minimum-length-of-anagram-concatenation) | | [`哈希表`](/tag/hash-table.md) [`字符串`](/tag/string.md) [`计数`](/tag/counting.md) | <font color=#ffb800>Medium</font> |
449449
| 3139 | [使数组中所有元素相等的最小开销](https://leetcode.com/problems/minimum-cost-to-equalize-array) | | [`贪心`](/tag/greedy.md) [`数组`](/tag/array.md) [`枚举`](/tag/enumeration.md) | <font color=#ff334b>Hard</font> |

src/problem/0046.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ permutations_. You can return the answer in **any order**.
5050
#### 复杂度分析
5151

5252
- **时间复杂度**`O(n * n!)`,其中 `n``nums` 的长度。主要由递归调用栈的深度决定,递归深度(即排列的数量 `n!`)乘以每次操作的时间复杂度 `O(n)`,总时间复杂度为 `O(n * n!)`
53-
- **空间复杂度**`O(n)`(不包含结果数组使用的空间)递归调用栈的深度为 `n``used` 数组的大小为 `n`
53+
- **空间复杂度**`O(n * n!)`,空间复杂度主要由以下几个部分组成:
54+
- 结果数组`res` 用于存储所有生成的唯一排列,在最坏情况下(所有元素都不相同),生成的排列数为 `n!`,因此结果数组的空间复杂度为 `O(n * n!)`
55+
- 临时数组 `track`,在每个递归调用中,`track` 的最大长度为 `n`,因此其空间复杂度为 `O(n)`
56+
- 布尔数组 `used` 用于标记哪些元素已经被使用,大小为 `n`,因此占用 `O(n)` 的空间。
57+
- 综合考虑,最主要的空间复杂度来源于结果数组 `res`,因此整体空间复杂度为 `O(n * n!)`
5458

5559
## 代码
5660

src/problem/0047.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ _all possible unique permutations **in any order**._
5656
- 在回溯过程中,每次递归都要遍历 `n` 个元素,递归树的每一层都要做选择;
5757
- 对于每一层的递归,最多需要处理 `n!` 种情况;
5858
- 因此总的时间复杂度是 `O(n * n!)`
59-
- **空间复杂度**`O(n)`(不包含结果数组使用的空间)递归调用栈的深度为 `n``used` 数组的大小为 `n`
59+
- **空间复杂度**`O(n * n!)`,空间复杂度主要由以下几个部分组成:
60+
- 结果数组`res` 用于存储所有生成的唯一排列,在最坏情况下(所有元素都不相同),生成的排列数为 `n!`,因此结果数组的空间复杂度为 `O(n * n!)`
61+
- 临时数组 `track`,在每个递归调用中,`track` 的最大长度为 `n`,因此其空间复杂度为 `O(n)`
62+
- 布尔数组 `used` 用于标记哪些元素已经被使用,大小为 `n`,因此占用 `O(n)` 的空间。
63+
- 综合考虑,最主要的空间复杂度来源于结果数组 `res`,因此整体空间复杂度为 `O(n * n!)`
6064

6165
## 代码
6266

src/problem/0443.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,5 @@ var compress = function (chars) {
172172
| 271 | [字符串的编码与解码 🔒](https://leetcode.com/problems/encode-and-decode-strings) | | [`设计`](/tag/design.md) [`数组`](/tag/array.md) [`字符串`](/tag/string.md) | <font color=#ffb800>Medium</font> |
173173
| 604 | [迭代压缩字符串 🔒](https://leetcode.com/problems/design-compressed-string-iterator) | | [`设计`](/tag/design.md) [`数组`](/tag/array.md) [`字符串`](/tag/string.md) `1+` | <font color=#15bd66>Easy</font> |
174174
| 1313 | [解压缩编码列表](https://leetcode.com/problems/decompress-run-length-encoded-list) | | [`数组`](/tag/array.md) | <font color=#15bd66>Easy</font> |
175-
| 3163 | [压缩字符串 III](https://leetcode.com/problems/string-compression-iii) | | [`字符串`](/tag/string.md) | <font color=#ffb800>Medium</font> |
175+
| 3163 | [压缩字符串 III](https://leetcode.com/problems/string-compression-iii) | [[]](/problem/3163.md) | [`字符串`](/tag/string.md) | <font color=#ffb800>Medium</font> |
176176
| 3167 | [字符串的更好压缩 🔒](https://leetcode.com/problems/better-compression-of-string) | | [`哈希表`](/tag/hash-table.md) [`字符串`](/tag/string.md) [`计数`](/tag/counting.md) `1+` | <font color=#ffb800>Medium</font> |

src/problem/1233.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ followed by one or more lowercase English letters.
121121
#### 复杂度分析
122122

123123
- **时间复杂度**`O(n log n)`,其中 `n` 是文件夹的数量,主要开销在对 `folder` 数组进行排序。
124-
- **空间复杂度**`O(1)`不包含结果数组的存储空间
124+
- **空间复杂度**`O(n)`用于存储结果数组,最坏情况下(当所有文件夹都是独立的,没有子文件夹),`res` 的长度与输入数组相同
125125

126126
## 代码
127127

src/problem/1957.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ will always be **unique**.
120120
#### 复杂度分析
121121

122122
- **时间复杂度**`O(n)`,其中 `n` 是字符串 `s` 的长度,只遍历一次字符串,每个字符的处理是常数时间。
123-
- **空间复杂度**`O(1)`不包含结果存储空间,只使用了常数个变量
123+
- **空间复杂度**`O(n)`用于存储结果字符串,最坏情况下(输入字符串中没有重复字符),`res` 字符串的长度与输入字符串相同
124124

125125
## 代码
126126

src/problem/2352.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,19 @@ the same order (i.e., an equal array).
8585
1. **初始化变量**
8686

8787
- 获取矩阵的行数和列数 `n`
88-
- 创建一个哈希表 `map` 来存储行的字符串表示的出现次数。
89-
- 创建一个数组 `arr` 用于构建列的字符串表示。
88+
- 创建一个哈希表 `rows` 来存储行的字符串表示的出现次数。
89+
- 创建一个数组 `cols` 用于构建列的字符串表示。
9090

9191
2. **统计行的出现次数**
9292

93-
- 遍历每一行,将每一行的元素拼接成字符串 `str`(以逗号分隔)。
94-
- 将这个字符串作为键存入哈希表 `map`,并记录其出现次数。
95-
- 同时,将每一行的元素拼接到对应的列字符串 `arr[j]` 中,构建列的字符串表示。
93+
- 遍历每一行,将每一行的元素拼接成字符串 `rowStr`(以逗号分隔)。
94+
- 将这个字符串作为键存入哈希表 `rows`,并记录其出现次数。
95+
- 同时,将每一行的元素拼接到对应的列字符串 `cols[j]` 中,构建列的字符串表示。
9696

9797
3. **统计行列对的数量**
9898

9999
- 初始化结果 `res` 为 0。
100-
- 遍历构建的列字符串 `arr`,对每个列字符串,在哈希表中查找其出现次数。
100+
- 遍历构建的列字符串 `cols`,对每个列字符串,在哈希表中查找其出现次数。
101101
- 将出现次数累加到结果 `res` 中。
102102

103103
4. **返回结果**
@@ -106,7 +106,7 @@ the same order (i.e., an equal array).
106106
#### 复杂度分析
107107

108108
- **时间复杂度**`O(n^2)`,因为需要遍历整个 `grid` 矩阵一次,构建行和列字符串。
109-
- **空间复杂度**`O(n)`,哈希表 `map` 和数组 `arr` 存储了行和列的字符串表示。
109+
- **空间复杂度**`O(n)`,哈希表 `rows` 和数组 `cols` 存储了行和列的字符串表示。
110110

111111
## 代码
112112

@@ -118,24 +118,24 @@ the same order (i.e., an equal array).
118118
var equalPairs = function (grid) {
119119
const n = grid.length;
120120
// 存储行的字符串表示
121-
let map = new Map();
121+
let rows = new Map();
122122
// 存储列的字符串表示
123-
let arr = new Array(n).fill('');
123+
let cols = new Array(n).fill('');
124124

125125
// 构建并统计行字符串和列字符串
126126
for (let i = 0; i < n; i++) {
127-
let str = '';
127+
let rowStr = '';
128128
for (let j = 0; j < n; j++) {
129-
str += grid[i][j] + ',';
130-
arr[j] += grid[i][j] + ',';
129+
rowStr += grid[i][j] + ',';
130+
cols[j] += grid[i][j] + ',';
131131
}
132-
map.set(str, (map.get(str) || 0) + 1);
132+
rows.set(rowStr, (rows.get(rowStr) || 0) + 1);
133133
}
134134

135135
let res = 0;
136136
// 统计满足条件的行列对数量
137-
for (let str of arr) {
138-
res += map.get(str) || 0;
137+
for (let colStr of cols) {
138+
res += rows.get(colStr) || 0;
139139
}
140140
return res;
141141
};

0 commit comments

Comments
 (0)