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 a6c33f8

Browse files
Update
1 parent 95cb535 commit a6c33f8

13 files changed

+31
-19
lines changed

‎problems/0377.组合总和IV.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public:
117117
dp[0] = 1;
118118
for (int i = 0; i <= target; i++) { // 遍历背包
119119
for (int j = 0; j < nums.size(); j++) { // 遍历物品
120-
if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {
120+
if (i - nums[j] >= 0 && dp[i] <= INT_MAX - dp[i - nums[j]]) {
121121
dp[i] += dp[i - nums[j]];
122122
}
123123
}

‎problems/kamacoder/0047.参会dijkstra堆.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,12 +614,12 @@ int main() {
614614
615615
```
616616

617-
* 时间复杂度:O(E * (N + logE)) E为边的数量,N为节点数量
617+
* 时间复杂度:O(E * N * logE) E为边的数量,N为节点数量
618618
* 空间复杂度:O(log(N^2))
619619

620-
`while (!pq.empty())` 时间复杂度为 E ,while 里面 每次取元素 时间复杂度 为 logE,和 一个for循环 时间复杂度 为 N 。
620+
`while (!pq.empty())` 时间复杂度为 E ,优先级队列每次插入元素 时间复杂度 为 logE,和 一个for循环 时间复杂度 为 N 。
621621

622-
所以整体是 E * (N + logE)
622+
所以整体是 E * N * logE
623623

624624

625625
## 总结

‎problems/kamacoder/0053.寻宝-Kruskal.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646

4747
## 解题思路
4848

49+
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:最小生成树之kruskal算法](https://www.bilibili.com/video/BV1GD3uz8EY4),相信结合视频再看本篇题解,更有助于大家对本题的理解**
50+
4951
在上一篇 我们讲解了 prim算法求解 最小生成树,本篇我们来讲解另一个算法:Kruskal,同样可以求最小生成树。
5052

5153
**prim 算法是维护节点的集合,而 Kruskal 是维护边的集合**

‎problems/kamacoder/0053.寻宝-prim.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747

4848
## 解题思路
4949

50+
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:最小生成树之prim算法](https://www.bilibili.com/video/BV1gFKVzpExq),相信结合视频再看本篇题解,更有助于大家对本题的理解**
51+
5052
本题是最小生成树的模板题,那么我们来讲一讲最小生成树。
5153

5254
最小生成树可以使用prim算法也可以使用kruskal算法计算出来。

‎problems/kamacoder/0097.小明逛公园.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,22 @@
3131

3232
【输入示例】
3333

34+
```
3435
7 3
3536
1 2 4
3637
2 5 6
3738
3 6 8
3839
2
3940
1 2
4041
2 3
42+
```
4143

4244
【输出示例】
4345

46+
```
4447
4
4548
-1
49+
```
4650

4751
【提示信息】
4852

‎problems/kamacoder/0105.有向图的完全可达性.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@
6666

6767
1. 确认递归函数,参数
6868

69-
需要传入地图,需要知道当前我们拿到的key,以至于去下一个房间
69+
需要传入地图,需要知道当前我们拿到的key,以至于去下一个节点
7070

71-
同时还需要一个数组,用来记录我们都走过了哪些房间,这样好知道最后有没有把所有房间都遍历的,可以定义一个一维数组。
71+
同时还需要一个数组,用来记录我们都走过了哪些节点,这样好知道最后有没有把所有节点都遍历的,可以定义一个一维数组。
7272

7373
所以 递归函数参数如下:
7474

7575
```C++
7676
// key 当前得到的可以
77-
// visited 记录访问过的房间
77+
// visited 记录访问过的节点
7878
void dfs(const vector<list<int>>& graph, int key, vector<bool>& visited) {
7979
```
8080
@@ -259,9 +259,9 @@ int main() {
259259
260260
}
261261
vector<bool> visited(n + 1, false);
262-
visited[1] = true; // 1 号房间开始
262+
visited[1] = true; // 节点1开始
263263
queue<int> que;
264-
que.push(1); // 1 号房间开始
264+
que.push(1); // 节点1开始
265265
266266
// 广度优先搜索的过程
267267
while (!que.empty()) {

‎problems/kamacoder/0107.寻找存在的路径.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848

4949
## 思路
5050

51+
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:没想到并查集这么简单 !](https://www.bilibili.com/video/BV1k3T7zWEVj),相信结合视频再看本篇题解,更有助于大家对本题的理解**
52+
5153
本题是并查集基础题目。 如果还不了解并查集,可以看这里:[并查集理论基础](https://programmercarl.com/kamacoder/图论并查集理论基础.html)
5254

5355
并查集可以解决什么问题呢?

‎problems/kamacoder/0108.冗余连接.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252

5353
## 思路
5454

55+
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:并查集有点不简单了。。](https://www.bilibili.com/video/BV1gRM3z9EwZ),相信结合视频再看本篇题解,更有助于大家对本题的理解**
56+
5557
这道题目也是并查集基础题目。
5658

5759
这里我依然降调一下,并查集可以解决什么问题:两个节点是否在一个集合,也可以将两个节点添加到一个集合中。

‎problems/kamacoder/0109.冗余连接II.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252

5353
## 思路
5454

55+
**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html):[图论:并查集这次要上难度了](https://www.bilibili.com/video/BV1t2NEzaEMR),相信结合视频再看本篇题解,更有助于大家对本题的理解**
56+
5557
本题与 [108.冗余连接](./0108.冗余连接.md) 类似,但本题是一个有向图,有向图相对要复杂一些。
5658

5759
本题的本质是 :有一个有向图,是由一颗有向树 + 一条有向边组成的 (所以此时这个图就不能称之为有向树),现在让我们找到那条边 把这条边删了,让这个图恢复为有向树。

‎problems/kamacoder/0126.骑士的攻击astar.md‎

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -279,17 +279,15 @@ int main()
279279
280280
## 复杂度分析
281281
282-
A * 算法的时间复杂度 其实是不好去量化的,因为他取决于 启发式函数怎么写。
282+
A*算法的时间复杂度其实是不容易量化的,这取决于怎么写启发式函数。
283283
284-
最坏情况下,A * 退化成广搜,算法的时间复杂度 是 O(n * 2),n 为节点数量
284+
最坏情况下,A*算法退化成BFS,时间复杂度是O(n^2),n为节点的数量
285285
286-
最佳情况,是从起点直接到终点,时间复杂度为 O(dlogd),d 为起点到终点的深度。
286+
一般情况下,搜索路径是从起点直接到终点,while(!que.empty()) 需要执行d次,d为起点到终点的深度,而优先级队列每次添加元素都要进行堆排序,时间复杂度是O(logk),k为队列中元素的数量。所以时间复杂度为O(dlogk)。
287287
288-
因为在搜索的过程中也需要堆排序,所以是 O(dlogd)
288+
也可以非常粗略地认为A*算法的时间复杂度是O(nlogn),n为节点的数量
289289
290-
实际上 A * 的时间复杂度是介于 最优 和最坏 情况之间, 可以 非常粗略的认为 A * 算法的时间复杂度是 O(nlogn) ,n 为节点数量。
291-
292-
A * 算法的空间复杂度 O(b ^ d) ,d 为起点到终点的深度,b 是 图中节点间的连接数量,本题因为是无权网格图,所以 节点间连接数量为 4。
290+
本题中A*算法的空间复杂度是O(k),k为队列中元素的数量,空间消耗主要是队列里需要存放遍历的节点。
293291
294292
295293
## 拓展

0 commit comments

Comments
(0)

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