自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 代码随想录算法训练营第六十九天 | 总结篇

代码随想录对于题型的安排和很巧妙,知识点都是上下承接,有关联的,真正认真学起来就不会那么困难。接下来,我将继续进行二刷、三刷,巩固所学知识,提升自己的解题准确性和灵活性。之所以报名,是因为自己从去年十一月份开始刷代码随想录,总是断断续续的,而且一学到二叉树就开始摆烂。每次笔试的时候,我发现难题基本上都是二叉树、贪心、动规或者图论的知识,但是我一直没有坚持往后刷,笔试如果有三道题就只能ac第一道。希望正在刷题的大家都能坚持下来,不断进步,最终收获自己满意的offer。

2024-07-15 20:56:31 169

原创 代码随想录算法训练营第六十七天 | Floyd 算法精讲、A * 算法精讲(A star算法)、最短路算法总结、图论总结、复习

在这之前学习的dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化(SPFA) 都是单源最短路,即只能有一个起点。而本题是多源最短路,即 求多个起点到多个终点的多条最短路径,需要使用Floyd算法。Floyd 算法对边的权值正负没有要求,都可以处理。Floyd算法核心思想是动态规划。从滚动数组的角度来看,我们定义一个这么大的数组就可以,因为k 只是依赖于 k-1的状态,并不需要记录k-2,k-3,k-4 等等这些状态。所以递归公式可以为:。A * 算法 — 卡码网:1

2024-07-13 20:30:59 782

原创 代码随想录算法训练营第六十六天 | Bellman_ford 队列优化算法(SPFA)、Bellman_ford之判断负权回路、Bellman_ford之单源有限最短路、复习

对所有边松弛一次,相当于计算起点到达与起点一条边相连的节点的最短距离,那么对所有边松弛 k + 1次,就是求起点到达与起点k + 1条边相连的节点的最短距离。在 Bellman_ford 算法中,松弛 n-1 次所有的边 就可以求得 起点到任何节点的最短路径,松弛 n 次以上,minDist数组(记录起到到其他节点的最短距离)中的结果也不会有改变。理论上来说,对所有边松弛一次,相当于计算 起点到达与起点一条边相连的节点的最短距离。但真正有效的松弛,是基于已经计算过的节点在做的松弛。这是因为在代码中,计算。

2024-07-13 20:07:53 641

原创 代码随想录算法训练营第六十五天 | dijkstra(堆优化版)精讲、Bellman_ford 算法精讲、复习

minDist[B]表示到达B节点最小权值。如果通过 A 到 B 这条边可以获得更短的到达B节点的路径,即如果,那么我们就更新,这个过程就叫做 “松弛”。。Bellman_ford算法也是采用了动态规划的思想,即:将一个问题分解成多个决策阶段,通过状态之间的递归关系最后计算出全局最优解。

2024-07-13 19:20:51 1023

原创 代码随想录算法训练营第六十四天 | 拓扑排序、dijkstra(朴素版)

当然拓扑排序也要检测这个有向图是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的。循环以上两步,直到 所有节点都在图中被移除了。结果集的顺序,就是我们想要的拓扑排序顺序。dijkstra 算法同样是贪心的思路,不断寻找距离源点最近的没有访问过的节点。dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。实现拓扑排序的算法有两种:卡恩算法(BFS)和DFS,先主要掌握BFS。初始化时初始为最大值。,我们就可以认定图中一定有。数组用来记录每一个节点。

2024-07-11 20:38:37 506

原创 代码随想录算法训练营第六十三天 | prim算法、kruskal算法、复习

prim算法 是从节点的角度 采用贪心的策略 每次寻找距离 最小生成树最近的节点 并加入到最小生成树中。数组里的数值初始化为最大数,因为本题 节点距离不会超过 10000,所以初始化最大数为 10001就可以。本题是最小生成树的模板题,最小生成树可以使用 prim算法,也可以使用 kruskal算法计算出来。prim 算法是维护节点的集合,而 kruskal 是维护边的集合。判断首尾两个节点是否在同一个集合,需要用到。

2024-07-09 20:55:08 708

原创 代码随想录算法训练营第六十二天 | 108. 冗余连接、109. 冗余连接II、复习

从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即:同一个根节点)。如果边的两个节点已经出现在同一个集合里,说明着边的两个节点已经连在一起了,再加入这条边一定就出现环了。用数组把每条边记录下来,并统计节点入度,如果存在入度为2的节点,则实现函数。有向树的性质,如果是有向树的话,只有根节点入度为0,其他节点入度都为1。老是忘记初始化并查集。

2024-07-08 22:08:48 797

原创 代码随想录算法训练营第六十天 | 并查集理论基础、107. 寻找存在的路径、复习

并查集常用来解决。当我们需要判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。

2024-07-08 20:22:35 706

原创 代码随想录算法训练营第五十九天 | 110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长、复习

如果是处理下一个要访问的节点,需要判断下一个节点是否被访问过,如果被访问,则不继续dfs。所以判断点与点之间的关系,需要判断是不是差一个字符,如果差一个字符,那就是有链接。同时还需要一个数组,用来记录我们都走过了哪些节点,这样好知道最后有没有把所有节点都遍历的,可以定义一个一维数组。然后就是求起点和终点的最短路径长度,这里无向图求最短路,广搜最为合适,广搜只要搜到了终点,那么一定是最短的路径。数组来记录访问过的节点,该节点默认数组里元素都是false,把元素标记为true就是处理本节点了。

2024-07-05 20:54:25 1164

原创 代码随想录算法训练营第五十八天 | 101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿、复习

第二步:再遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起,遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。本题要求找到不靠边的陆地面积,那么我们只要从周边找到陆地然后 通过 dfs或者bfs 将周边靠陆地且相邻的陆地都变成海洋,然后再去重新遍历地图 统计此时还剩下的陆地就可以了。第一步:一次遍历地图,得出各个岛屿的面积,并做编号记录。第一步:深搜或者广搜将地图周边的 1 (陆地)全部改成 2 (特殊标记)

2024-07-05 17:07:02 514

原创 代码随想录算法训练营第五十七天 | 99.岛屿数量 深搜/广搜、100.岛屿的最大面积

遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都标记上。在遇到标记过的陆地节点和海洋节点的时候直接跳过。这样计数器就是最终岛屿的数量。搜索每个岛屿上“1”的数量,然后取一个最大的。

2024-07-03 18:06:59 456

原创 代码随想录算法训练营第五十六天 | 图论理论基础、深搜理论基础、98. 所有可达路径、797. 所有可能的路径、广搜理论基础、复习

4、处理循环中的逻辑:目前搜索节点出发的路径,如果对应的邻接矩阵中值为1,说明可达,就继续深度遍历。2、确认递归函数及参数:参数中需要传入当前遍历到的节点以及节点个数。3、确定终止条件:当当前遍历节点等于终点节点时,终止遍历,并将。和上一题的思路一样,只是这道题使用的是邻接表+核心代码模式。1、可以使用邻接矩阵或邻接表来记录点和边的情况。

2024-07-02 14:10:03 697

原创 代码随想录算法训练营第五十五天 | 42. 接雨水、84.柱状图中最大的矩形、复习

用单调栈求右边比当前柱子高的柱子,找到之后,单调栈的下一个元素就是左边比当前柱子高的柱子(因为单调栈里单调递增)。暴力解法是用一个for循环遍历数组,里面再用一个for循环找出当前柱子左右最高的柱子,然后当前柱子的储水量就是。,当前柱子的高度为h,则以当前柱子为基础能形成的最大面积为。使用单调栈去找每个柱子左右比他矮的柱子,中间的距离就为宽。分析:时间复杂度:O(n),空间复杂度:O(m)。分析:时间复杂度:O(n),空间复杂度:O(n)。,否则无法算出所有柱子的左右最小值。,时间复杂度为O(n。

2024-07-01 14:36:17 807

原创 代码随想录算法训练营第五十三天 | 739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II、复习

单调栈的作用:用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。我的思路:遍历一次数组后,栈当中剩下的元素要么是最大值,要么是比他大的值在他前面,所以再遍历一次数组,并使用最大值进行比较,如果栈中弹出的元素是最大值,就赋值为-1,否则为他找更大值。分析:时间复杂度:O(m + n),空间复杂度:O(m + n)。卡哥思路:用i取模来模拟成环的遍历。

2024-06-30 14:04:40 879

原创 代码随想录算法训练营第五十二天 | 647. 回文子串、516.最长回文子序列、动态规划总结篇、复习

分析:时间复杂度:O(n2),空间复杂度:O(n2)。分析:时间复杂度:O(n2),空间复杂度:O(n2)。

2024-06-28 21:37:09 557

原创 代码随想录算法训练营第五十一天 | 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇、复习

分析:时间复杂度:O(n * m),空间复杂度:O(n * m)。分析:时间复杂度:O(n * m),空间复杂度:O(n * m)。分析:时间复杂度:O(n * m),空间复杂度:O(n * m)。

2024-06-28 10:57:44 580

原创 代码随想录算法训练营第五十天 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序复习

最近忙论文,简单记录一下。

2024-06-27 22:23:41 488

原创 代码随想录算法训练营第四十九天 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、复习

分析:时间复杂度:O(mn),空间复杂度:O(mn)。分别为两个数组的长度。),空间复杂度:O(n)。),空间复杂度:O(n)。分析:时间复杂度:O(n。分析:时间复杂度:O(n。

2024-06-25 14:16:29 1279

原创 代码随想录算法训练营第四十八天 | 188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票总结

将买卖股票3当中的递推公式抽象成一个循环:代码分析:时间复杂度:O(nk),空间复杂度:O(nk)。分析:时间复杂度:O(n),空间复杂度:O(4n)。在买卖股票2的基础上,每次卖股票时减去手续费就可以了:。分析:时间复杂度:O(n),空间复杂度:O(2n)。

2024-06-24 22:14:39 1310

原创 代码随想录算法训练营第四十六天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

因为本题是可以多次买卖股票,所以在当天买股票的时候可能之前已经买卖过,已经是有收益的了。分析:时间复杂度:O(n),空间复杂度:O(5n)。分析:时间复杂度:O(n),空间复杂度:O(n)。分析:时间复杂度:O(n),空间复杂度:O(n)。代码中和买卖股票1的区别在于。

2024-06-23 20:21:49 1149

原创 代码随想录算法训练营第四十五天 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

所以本题将198中的动态规划思路打包成一个函数,通过考虑不同的情况,向函数中传入不同的子数组就可以。而情况二 和 情况三 都包含了情况一了,所以只考虑情况二和情况三就可以了。空间复杂度:O(log n),算上递推系统栈的空间。分析:时间复杂度:O(n),空间复杂度:O(n)。分析:时间复杂度:O(n),空间复杂度:O(n)。时间复杂度:O(n),每个节点只遍历了一次。使用后序遍历,因为需要返回左右孩子的结果。表示不偷当前节点,用。

2024-06-21 16:05:03 672

原创 代码随想录算法训练营第四十四天 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包理论基础、背包问题总结

分析:时间复杂度:O(mn),空间复杂度:O(m)。m是的值,n是的长度。确定遍历顺序:因为是求最小值且硬币个数无限,所以正序遍历背包和物品,谁先遍历都可以。打印dp数组,用于debug代码我的代码卡哥代码分析:时间复杂度:O(n * √n),空间复杂度:O(n)。分析:时间复杂度:O(n3),空间复杂度:O(n)。因为substr返回子串的副本是O(n)的复杂度(这里的n是substring的长度)。将多重背包中多个物品的数量展开,然后看做是01背包来解决。分析:时间复杂度:O(m

2024-06-20 16:45:40 874

原创 代码随想录算法训练营第四十三天 | 完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

分析:时间复杂度:O(mn),空间复杂度:O(m)。其中 m 是 amount,n 是 coins 的长度。完全背包中,每个物品可以使用无限次。遍历顺序为顺序遍历物品和顺序遍历背包,并且两个for循环可以交换顺序。分析:时间复杂度:O(mn),空间复杂度:O(m)。其中m是target,n是nums的长度。分析:时间复杂度:O(mn),空间复杂度:O(n)。

2024-06-19 14:25:13 905

原创 代码随想录算法训练营第四十二天 | 1049.最后一块石头的重量II、494.目标和、474.一和零

分析:时间复杂度:O(kmn),空间复杂度:O(mn)。),空间复杂度:O(n)。),空间复杂度:O(n)。分析:时间复杂度:O(n。分析:时间复杂度:O(n。

2024-06-18 22:13:49 570

原创 代码随想录算法训练营第四十一天 | 01背包理论基础、416. 分割等和子集

,空间复杂度:O(n)。),空间复杂度:O(n)。分析:时间复杂度:O(n。分析:时间复杂度:O(n。分析:时间复杂度:O(n。),空间复杂度:O(n。

2024-06-18 21:33:36 1130

原创 代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

分析:时间复杂度:O(m * n),空间复杂度:O(m * n)。分析:时间复杂度:O(),空间复杂度:O()。),空间复杂度:O(n)。),空间复杂度:O(n)。分析:时间复杂度:O(n。分析:时间复杂度:O(n。

2024-06-15 20:01:31 837

原创 代码随想录算法训练营第三十八天 | 动态规划基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

动态规划,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。比如背包问题:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。dp[j]

2024-06-14 13:50:02 888 1

原创 代码随想录算法训练营第三十七天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树、总结

分析:时间复杂度:O(nlogn),空间复杂度:O(n)。分析:时间复杂度:O(n),空间复杂度:O(n)。

2024-06-13 09:43:26 711

原创 代码随想录算法训练营第三十六天 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

中,插入操作的时间复杂度是 O(k),其中 k 是插入位置的索引。在最坏情况下,插入位置可能是链表的末端,所以插入单个人的复杂度为 O(n)。因为有 n 个人需要插入,这部分的总时间复杂度是 O(n。分析:时间复杂度:O(nlogn),空间复杂度:O(1)。分析:时间复杂度:O(n),空间复杂度:O(1)。分析:时间复杂度:O(nlogn + n。的时间复杂度是O(nlogn)。),空间复杂度:O(n)。

2024-06-12 12:41:42 896

原创 代码随想录算法训练营第三十五天 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

分析:时间复杂度:O(nlogn),空间复杂度:O(1)。分析:时间复杂度:O(n),空间复杂度:O(1)。分析:时间复杂度:O(n),空间复杂度:O(n)。的时间复杂度是O(nlogn)。

2024-06-11 12:27:52 695

原创 代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

分析:时间复杂度:O(n),空间复杂度:O(1)。分析:时间复杂度:O(n),空间复杂度:O(1)。分析:时间复杂度:O(n),空间复杂度:O(1)。计算每天股票价格的差值,将正数加起来。

2024-06-08 10:09:56 818

原创 代码随想录算法训练营第三十一天 | 455.分发饼干、376. 摆动序列、53. 最大子序和

来记录累加的最大值。当累加和小于0时,如果它加上后面的数,就会让后面的数变小,所以这是就把。分析:时间复杂度:O(nlogn);空间复杂度:O(1)。分析:时间复杂度:O(n);空间复杂度:O(1)。分析:时间复杂度:O(n);空间复杂度:O(1)。时间复杂度主要由排序步骤决定,其中。归零,从下一个数重新寻找子序列。

2024-06-07 12:10:18 592

原创 代码随想录算法训练营第三十天 | 332.重新安排行程、51. N皇后、37. 解数独、回溯总结

332.重新安排行程题目链接:https://leetcode.cn/problems/reconstruct-itinerary/文档讲解:https://programmercarl.com/0332.%E9%87%8D%E6%96%B0%E5%AE%89%E6%8E%92%E8%A1%8C%E7%A8%8B.html视频讲解:https://www.bilibili.com/video/BV1cy4y167mM/思路选择合适的容器:选择Map来存储目的地信息,并且用一个Integer来

2024-06-06 12:28:49 562

原创 代码随想录算法训练营第二十九天 | 491.递增子序列、46.全排列、47.全排列 II

对于排列问题,树层上去重和树枝上去重,都是可以的,但是树层上去重效率更高。树层上对前一位去重非常彻底,效率很高,树枝上对前一位去重虽然最后可以得到答案,但是做了很多无用搜索。

2024-06-05 12:45:39 507

原创 代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II

因为要所有子集的集合,所以每一层的每一个结点都要记录下来。

2024-06-04 18:01:51 689

原创 代码随想录算法训练营第二十七天 | 39. 组合总和、40.组合总和II、131.分割回文串

【代码】代码随想录算法训练营第二十七天 | 39. 组合总和、40.组合总和II、131.分割回文串。

2024-06-03 19:05:38 865

原创 代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合

本题的深度是由digits的长度决定的,每往下一层是对不同数组对应的字母进行遍历。而宽度是数组对应的字母的长度。没有定义nums数组,直接在循环中用i的值,并且把sum作为参数放入回溯。

2024-06-01 15:32:09 854

原创 代码随想录算法训练营第二十四天 | 回溯理论基础、77. 组合

回溯算法框架模板:回溯算法的过程可以抽象成一棵n叉树。递归遍历的是n叉树的深度,for循环是遍历每一层的节点。

2024-05-31 14:17:33 628

原创 代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇

涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。

2024-05-30 15:54:34 570

原创 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

【代码】代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点。

2024-05-29 17:00:42 534

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除