![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode & kamacoder
记录刷题,方便自己二刷复盘
why_1513
求实求真,大气大气
展开
-
单词 搜索
【代码】单词 搜索。原创 2024-07-24 16:25:08 · 85 阅读 · 0 评论 -
二叉树的直径
【代码】二叉树的直径。原创 2024-07-24 15:53:57 · 204 阅读 · 0 评论 -
合并两个有序链表
【代码】排序 链表。原创 2024-07-24 11:08:18 · 264 阅读 · 0 评论 -
随机链表的复制
使用哈希表来保存每个节点对应的新节点的地址,先进行一遍遍历创建random都为0的链表,然后根据哈希表对复制链表节点的random进行赋值。原创 2024-07-23 19:16:22 · 90 阅读 · 0 评论 -
K个一组翻转链表
【代码】K个一组翻转链表。原创 2024-07-23 17:16:36 · 399 阅读 · 0 评论 -
环形 链表
采用快慢指针,如果链表存在环,则快慢指针一定会相遇。原创 2024-07-18 15:17:19 · 437 阅读 · 0 评论 -
回文 链表
暴力解法复制一个新的链表出来并将其反转,然后挨个元素进行比较。比较是否是回文链表,实际上是在比较链表节点 val 的值是否相等,那么只需遍历一次链表,将其val存放在数组中,然后去判断这个数组是否回文。上述的写法都需要额外的空间来存放val,其实判断是否回文,只需要判断链表的前半部分和后半部分是否相等,那么只需要将链表的后半部分反转,然后依次进行比较,这样就不必花费额外的空间。可以使用快慢指针的方法找到链表后半部分的头节点。原创 2024-07-18 14:57:25 · 155 阅读 · 0 评论 -
搜索二维矩阵Ⅱ
【代码】搜索二维矩阵Ⅱ。原创 2024-07-17 16:35:26 · 69 阅读 · 0 评论 -
两数 相加
【代码】两数 相加。原创 2024-07-17 16:07:22 · 106 阅读 · 0 评论 -
旋转 图像
首选对矩阵进行转置,然后首尾列交换顺序,直到中间列。原创 2024-07-17 15:33:52 · 106 阅读 · 0 评论 -
数组中的第K个最大元素
【代码】数组中的第K个最大元素。原创 2024-07-16 20:53:31 · 79 阅读 · 0 评论 -
矩 阵 置 零
【代码】矩 阵 置 零。原创 2024-07-16 19:50:04 · 175 阅读 · 0 评论 -
缺失的第一个正数
将数组中所有小于等于0的数都置为 N + 1, 遍历数组,将此时将 nums[i] - 1 的下标对应的值变为负数,那么从前往后遍历到的第一个正数的下标,便是缺失的第一个正数。如果数组的数都是负数,说明数组中出现的正数恰好是 1 - N, 那么N + 1 便是我们需要找的数。原创 2024-07-16 19:35:32 · 461 阅读 · 0 评论 -
除自身以外数组的乘积
【代码】除自身以外数组的乘积。原创 2024-07-15 17:05:58 · 390 阅读 · 0 评论 -
最小覆盖子串
【代码】最小覆盖子串。原创 2024-07-12 16:48:27 · 261 阅读 · 0 评论 -
轮转 数组
【代码】轮转 数组。原创 2024-07-11 17:41:33 · 84 阅读 · 0 评论 -
无重复字符的最长子串
【代码】无重复字符的最长子串。原创 2024-07-11 17:26:41 · 274 阅读 · 0 评论 -
盛最多水的容器
【代码】盛最多水的容器。原创 2024-07-11 16:37:19 · 442 阅读 · 0 评论 -
最长连续子序列
采用set对数组nums元素去重,然后遍历set元素,判断元素是否是连续序列的起始元素。如果是,则计算该元素起始序列的长度。因此set中每个元素只会被遍历一次。原创 2024-07-10 10:52:59 · 81 阅读 · 0 评论 -
小明逛公园-(Floyd 算法)
从递推公式:grid[i][j][k] = min(grid[i][k][k - 1] + grid[k][j][k - 1], grid[i][j][k - 1]) 可以看出,我们需要三个for循环,分别遍历i,j 和k。那么我们只需要记录 grid[i][j][1] 和 grid[i][j][0] 就好,之后就是 grid[i][j][1] 和 grid[i][j][0] 交替滚动。– 节点i 到 节点j 的最短路径不经过节点k,grid[i][j][k] = grid[i][j][k - 1]原创 2024-07-09 20:42:55 · 910 阅读 · 0 评论 -
城市间货物运输Ⅲ-卡玛(Bellman_ford之单源有限最短路)
题目要求最多经过 k 个城市的条件下,而不是一定经过k个城市,也可以经过的城市数量比k小,但要最短的路径。对所有边松弛一次,相当于计算 起点到达 与起点一条边相连的节点 的最短距离。那么经过 k 个城市,则共计 k + 1条边,那么最多需要松弛 k + 1次。使用队列优化后的 Bellman_ford 算法,关键在于 如何控制松弛 k 次,可以用一个变量 que_size 记录每一轮松弛入队列的所有节点数量。下一轮松弛的时候,就把队列里 que_size 个节点都弹出来,就是上一轮松弛入队列的节点。原创 2024-07-09 15:57:38 · 362 阅读 · 0 评论 -
城市间货物运输Ⅱ-卡玛(Bellman_ford之判断负权回路)
如果是队列优化过的 Bellman_ford 算法,在极端情况下,即:所有节点都与其他节点相连,每个节点的入度为 n-1 (n为节点数量),所以每个节点最多加入 n-1 次队列。利用一个数组来记录每个节点的出现次数,如果某个节点出现次数超过了 n - 1次,就说明该图存在负权回路。Bellman_ford算法最多对每条边进行 n - 1 次松弛,n 为图中节点个数,就可以得到从源点到 n 的最短路径,那么对每条边进行第 n - 1次松弛,如果 minDist 数组还会更新的话,那么就说明图中存在负权回路。原创 2024-07-09 14:28:51 · 186 阅读 · 0 评论 -
城市间货物运输Ⅰ-卡玛(Bellman_ford 队列优化算法(SPFA))
Bellman_ford 算法每次松弛 都是对所有边进行松弛,但真正有效的松弛,是基于已经计算过的节点在做的松弛,所以 Bellman_ford 算法 每次都是对所有边进行松弛,其实是多做了一些无用功。一般来说,SPFA 的时间复杂度为 O(K * N) K 为不定值,因为 节点需要计入几次队列取决于 图的稠密度。如果图是一条线形图且单向的话,每个节点的入度为1,那么只需要加入一次队列,这样时间复杂度就是 O(N)。实际上 只需要对 上一次松弛的时候更新过的节点作为出发节点所连接的边 进行松弛就够了。原创 2024-07-09 11:54:39 · 311 阅读 · 0 评论 -
城市间货物运输Ⅰ-卡玛(Bellman_ford)
本题是经典的带负权值的单源最短路问题,Dijkstra 求单源最短路问题的前提是图中的边无负权重。当图中的边存在负权重时,就需要使用 Bellman_ford 算法来进行求解了。Bellman_ford算法的核心思想是 对所有边进行松弛n-1次操作(n为节点数量),从而求得目标最短路。本篇学习了代码随想录。原创 2024-07-09 11:01:40 · 362 阅读 · 0 评论 -
参加科学大会-卡玛(堆优化版Dijkstra)
与 Prim 类似,当节点数目较多,边的数量很小的时候(稀疏图),可以考虑从边的角度来求最短路,邻接矩阵遇到稀疏图,会导致申请过大的二维数组造成空间浪费 且遍历 边 的时候需要遍历整个n * n矩阵,造成时间浪费。而在朴素版Dijkstra中,需要一个for循环来遍历节点,并找出未访问节点,然后对每个为访问节点更新minDist数组,即源点到为访问节点的最小权重。如果采取小顶堆来存放边,并按照边权重的大小进行排序,那么我们每次从堆中取出的边便是权重最小的边,那么就无须花费两层for循环来寻找最近的节点了。原创 2024-07-08 22:03:53 · 682 阅读 · 0 评论 -
参加科学大会-卡玛(朴素版Dijkstra)
dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。dijkstra 算法可以同时求起点到所有节点的最短路径;本文学习了就代码随想录。原创 2024-07-08 20:56:35 · 261 阅读 · 0 评论 -
软件构建-卡玛
如果我们发现结果集元素个数 不等于 图中节点个数,我们就可以认定图中一定有 有向环。循环以上两步,直到 所有节点都在图中被移除了。本篇学习了代码随想录。原创 2024-07-08 19:00:14 · 140 阅读 · 0 评论 -
寻宝-卡玛-Kruskal算法
上一篇学习了最小生成树的Prim算法,这一篇是对最小生成树 Kruskal 算法的学习。在代码实现中使用了 并查集 和 lambda表达式。原创 2024-07-08 16:41:59 · 219 阅读 · 0 评论 -
寻宝-卡玛-Prim算法
最小生成树是所有节点的最小连通子图, 即:以最小的成本(边的权值)将图中所有节点链接到一起。图中有n个节点,那么一定可以用 n - 1 条边将所有节点连接到一起。第三步,更新非生成树节点到生成树的距离(即更新minDist数组),minDist数组 用来记录 每一个节点距离最小生成树的最近距离。本题是最小生成树的相关题目,最小生成树的题目可以由 Prim 算法 和 Kruskal 进行解答。prim算法 是从节点的角度 采用贪心的策略 每次寻找距离 最小生成树最近的节点 并加入到最小生成树中。原创 2024-07-08 15:44:52 · 341 阅读 · 0 评论 -
冗余连接Ⅱ-卡玛
本体可以描述为有一个有向图,是由一颗有向树 + 一条有向边组成的 (所以此时这个图就不能称之为有向树),现在让我们找到那条边 把这条边删了,让这个图恢复为有向树。看了这道题没什么思路,学习了代码随想录。原创 2024-07-07 19:05:21 · 109 阅读 · 0 评论 -
冗余连接-卡玛-力扣
输出一条可以删除的边。如果有多个答案,请删除标准输入中最后出现的那条边。如果边的两个节点已经出现在同一个集合里,说明着边的两个节点已经连在一起了,再加入这条边一定就出现环了。现给定一个拥有 n 个节点(节点标号是从 1 到 n)和 n 条边的连通无向图,请找出一条可以删除的边,删除后图可以变成一棵树。那么从前向后将边加入并查集,如果要加入的边的节点已经在并查集中,那么就将其删掉。树可以看成是一个图(拥有 n 个节点和 n - 1 条边的连通无环无向图)。原创 2024-07-07 16:03:52 · 165 阅读 · 0 评论 -
寻找存在的路径-卡玛
本题是要寻找无向图是否存在从 s 到 t 的一条路径,那么选择从 s 出发,进行深度搜索,只要能到达 t ,就说明存在路径。原创 2024-07-07 14:22:54 · 285 阅读 · 0 评论 -
岛屿的周长-卡玛
遍历每一个空格,遇到陆地则计算其上下左右的空格情况。如果该陆地上下左右的空格是水域或者越界了,则说明是一条边,将这些边累加起来便是岛屿的周长。原创 2024-07-05 17:18:33 · 154 阅读 · 0 评论 -
有向图的完全可达性-卡玛
本题对有向图进行遍历,并标记遍历经过的节点即可,最后查看节点是否完全标记。深度优先搜索和广度优先搜索均可。原创 2024-07-05 16:38:26 · 135 阅读 · 0 评论 -
字母串接龙-卡玛
本体需要判断两个字符之间是不是差一个字符,如果差一个字符,那就是存在连接。那么不同的字符串之间,就能够构成一幅无向图,需要求的问题就转化为 起点和终点的最短路径长度。无向图的最短路径,选择广度优先而非深度优先,因为广度优先搜索,那么首先得到的路径就是最短的路径,而深度搜索则还需要去对比搜索得到的路径的长度。原创 2024-07-05 15:48:38 · 162 阅读 · 0 评论 -
建造最大岛屿-卡玛
本题刚开始的想法是挨个将矩阵中为0的元素变为1,然后取计算最大岛屿的面积。原创 2024-07-05 11:37:24 · 145 阅读 · 0 评论 -
水流问题-卡玛
本题一开始的想法是遍历每个点,然后看这个点 能不能同时到达第一组边界和第二组边界,但是超时了。原创 2024-07-04 16:46:34 · 131 阅读 · 0 评论 -
沉没孤岛-卡玛
本题与孤岛的总面积类似,只不过不再是记录孤岛的面积,而需要使用一个数组来记录孤岛的坐标,然后将孤岛的坐标在矩阵中置为0;原创 2024-07-04 15:29:58 · 209 阅读 · 0 评论 -
孤岛的总面积-卡玛
那么如果一个岛屿不是孤岛,那么其在搜索时,一定会产生越界,利用一个标记位来对越界进行标记,如果产生越界就不统计这个岛的面积。本题需要求的是孤岛的面积,孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。原创 2024-07-04 15:16:16 · 157 阅读 · 0 评论 -
岛屿的最大面积-卡玛
本题与岛屿的数量区别在于需要统计每个岛屿的面积大小,并保留岛屿的面积最大值,那么在遍历每个岛屿的时候,遇到所有的陆地节点总和便是岛屿的面积,记录即可。自己使用了返回值作为记录,代码随想录。则将计数变量作为全局变量,在主函数遇到新岛屿时归零,重新计数。原创 2024-07-04 14:11:47 · 198 阅读 · 0 评论