自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 资源 (5)
  • 收藏
  • 关注

原创 代码随想录算法训练营第六十四天|Floyd 算法、A * 算法、最短路算法总结

这个过程中考虑点还是边看是稠密图还是稀疏图会个Floyd和朴素版本Bellman-Ford以及变种即可多源就用Floyd-Warshall算法单源就用(朴素版本Bellman-Ford算法 + 负权回路检测) 版本2.1 有限就用有限节点最短路径版本(朴素版本Bellman-Ford算法 + 负权回路检测 + 有限节点)版本。

2024-07-25 17:44:33 214

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

Bellman_ford 队列优化算法 ,也叫SPFA算法(Shortest Path Faster Algorithm)。传统方法:Bellman-Ford算法需要对每一条边在每次迭代中进行检查,这可能导致对所有顶点反复执行不必要的松弛操作,尤其是在图较大而边数较多的情况下。使用队列:只对那些其最短路径估计值发生变化的节点进行松弛操作,因为只有这些节点可能影响其邻接节点的路径估计值。

2024-07-24 21:22:01 311

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

dijkstra三部曲:第一步,选源点到哪个节点近且该节点未被访问过第二步,该最近节点被标记访问过第三步,更新非访问节点到源点的距离(即更新minDist数组)在第一个版本的代码中,这三部曲是套在一个 for 循环里,为什么?因为我们是从节点的角度来解决问题。三部曲中第一步(选源点到哪个节点近且该节点未被访问过),这个操作本身需要for循环遍历 minDist 来寻找最近的节点。

2024-07-23 17:18:58 570

原创 代码随想录算法训练营第六十一天|117. 软件构建、拓扑排序、dijkstra(朴素版)

实现拓扑排序的算法有两种:卡恩算法(BFS)和DFS,一般来说我们只需要掌握 BFS (广度优先搜索)就可以了。当我们做拓扑排序的时候,应该优先找 入度为 0 的节点,只有入度为0,它才是出发节点。1.找到入度为0 的节点,加入结果集2.将该节点从图中移除。

2024-07-22 14:23:07 360

原创 代码随想录算法训练营第五十九天|prim算法、kruskal算法

Prim 算法用于寻找加权连通图的最小生成树(Minimum Spanning Tree,MST)。最小生成树是指连接图中所有顶点的最小权重的树。该算法从一个起始节点开始,不断选择与已加入生成树的节点集最近的节点,并将其加入生成树,直到所有节点都包含在生成树中。第一步:选距离生成树最近的非生成树节点第二步:最近节点(cur)加入生成树第三步:更新非生成树节点到生成树的距离(即更新minDist数组)

2024-07-21 14:08:20 912

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

状态:还行思路:并查集可以解决什么问题:两个节点是否在一个集合,也可以将两个节点添加到一个集合中。

2024-07-19 18:53:24 189

转载 DDD领域驱动设计

领域会细分为不同的子域,子域可以根据自身重要性和功能属性划分为三类子域,它们分别是:核心域、通用域和支撑域。决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。没有太多个性化的诉求,同时被多个子域使用的通用功能子域是通用域(登录、认证等)。还有一种功能子域是必需的,但既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,它就是支撑域。限界上下文:定义了领域的边界Person是实体,Address是值对象,领域模型采用充血模型。

2024-07-18 22:23:22 35

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

并查集常用来解决连通性问题。就是判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。步骤:初始化:father[]来存储每个节点的父节点,初始化时将父节点设为自己,father[i]=i查询:find(i),递归查找找i的祖先,找到了就返回祖先,否则不断往上找。合并:union/join(u,v),分别找到u的祖先和v的祖先,u=find(u),v=find(v),如果不是同一个,让u做v的祖先,father[v]=u。一句话,join(u,v)就是让u的祖先做v祖先的祖先。

2024-07-18 15:41:08 338

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

状态:用dfs搞了半天没整出来。

2024-07-17 23:30:01 333

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

状态:不会步骤1:将边界上的陆地变为海洋步骤2:计算孤岛的总面积。

2024-07-16 23:02:32 465

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

状态:不会。

2024-07-15 22:26:37 468

原创 代码随想录算法训练营第五十二天(图论)| 98. 所有可达路径、深度优先搜索、广度优先搜索

邻接矩阵是一种使用二维数组来表示图的方法。矩阵中的元素表示节点之间是否存在边。如果存在边,则对应的矩阵元素为1(或边的权重);否则为0。

2024-07-13 22:34:59 1159

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

状态:不会可以使用双指针法也可以使用单调栈。在纵向求解中,我们将问题简化为在每个柱子的位置上能够存储多少水。使用双指针法时,我们分别从数组的两端向中间移动,维护两个指针和两个变量(左侧最大高度和右侧最大高度)。这种方法侧重于通过比较当前位置柱子的高度和其两侧最大高度的较小值来计算当前位置能够存储的水量。左右指针移动:从数组两端开始,通过比较左右指针当前位置的高度来决定移动哪个指针。更新最大高度:每次移动指针时,更新左侧和右侧的最大高度。

2024-07-12 22:47:21 355

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

题目链接:状态:不会这道题需要找到下一个更大元素。使用栈来存储未找到更高温度的下标,那么栈中的下标对应的温度从栈底到栈顶是递减的。这意味着,栈顶元素的温度是当前温度数组中未找到更高温度的最高温度的下标。

2024-07-11 22:38:46 351

原创 代码随想录算法训练营第四十九天| 647. 回文子串、 516.最长回文子序列

状态:不会dp[i][j] 表示字符串 s 从索引 i 到索引 j 这一段子串是否为回文子串。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况:情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串情况二:下标i 与 j相差为1,例如aa,也是回文子串。

2024-07-10 23:04:01 467

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

状态:不会dp[i][j] 表示在 s 的前 j 个字符中,t 的前 i 个字符作为子序列出现的次数。匹配的情况:1.当 s[j-1] 与 t[i-1] 匹配时,说明我们可以用 s[j-1] 来匹配 t[i-1],这种情况下,在 s 的前 j-1 个字符中找到的所有 t 的前 i-1 个字符作为子序列的组合数(dp[i-1][j-1])都可以作为当前组合的一部分。

2024-07-09 20:25:03 650

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

状态:一开始没想明白为啥要 max(dp[i - 1][j], dp[i][j - 1])如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。

2024-07-08 19:06:22 385

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

状态:不会,递推状态的时候只想着如何从dp[i-1]推导dp[i],没想过可能需要枚举dp[0-i]找出所有比自己小的数字的dp[j],在这些dp[j]中找到最大的,然后加1。也就是 j 从[0,i) 中 if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);

2024-07-06 17:03:42 356

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

状态:不会思路:在股票买卖1使用一维dp的基础上,升级成二维的即可。要注意: dp[j][0] = Math.max(dp[j][0], dp[j - 1][1] - prices[i]);dp[j - 1][1] - prices[i] 是因为买入股票的操作要用dp[j-1][1],也就是上次卖出去得到的钱来买这次的股票。

2024-07-05 19:07:26 690

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

状态:做出来了因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。每天的状态要么是持有股票要么是不持有,那么手头的钱就可以分为:dp[i][0]表示第i天持有当前股票的最大利润、dp[i][0]表示第i天不持有当前股票的最大利润。那么这个状态如何变化的呢?既然持有的话,说明第i-1天是持有且没有卖,或者第i-1天不持有,但是买入第i天的股票了。所以dp[i][0] = max(dp[i-1][0],-price[i])

2024-07-04 14:48:07 740

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

状态:不会可以从最后一间房子开始,每次面对一个房子要考虑打劫还是不打劫,如果打劫了就从它的下下个房子开始打劫,在这个过程中打劫还是不打劫可以组成一个二叉树。如图,val是索引然后这个过程中可以使用记忆化搜索来记录已经算过的值,从而实现剪枝。和上面的想法类似,决定dp[i]的因素就是第i房间偷还是不偷。

2024-07-03 15:25:46 449

原创 代码随想录算法训练营第四十一天| 322. 零钱兑换、279.完全平方数、139.单词拆分

状态:能想到凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],但没想到加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。

2024-07-02 15:10:50 527

原创 代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

状态:不会思路:和494.目标和类似,这题属于组合问题,当我们有一个硬币coin时,对于每个金额j,通过添加这个硬币,我们可以把凑成金额j-coin的所有方法数加到凑成金额j的方法数中。这是因为每一种凑成 j-coin 的方法,加上硬币coin,都变成了一种凑成j的方法。

2024-07-01 19:02:19 332

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

状态:没想到尽量让石头分成重量相同的两堆思路:尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了,和昨天的相同子集问题就类似了。

2024-06-30 13:30:51 723

原创 代码随想录算法训练营第三十七天|01背包问题、分割等和子集

状态:忘了。

2024-06-28 22:10:03 1096

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

状态:还行思路:当前状态的只有可能是从上面或者左边过来的,所以 dp[i][j] = dp[i-1] + dp[j-1]

2024-06-27 21:03:01 843

原创 代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

状态:so easy思路:最简单的递归就不说了。使用动态规划的话,状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]

2024-06-26 15:57:18 280

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

状态:无语,这题从右边界排序做不了!

2024-06-25 22:33:14 252

原创 代码随想录算法训练营第三十三天|452. 用最少数量的箭引爆气球、 435. 无重叠区间、 763.划分字母区间

状态:没想出来思路:对气球终点位置排序,从第一个气球终点位置射出箭,看这支箭可以尽可能穿过几个气球,如果遇到一个气球的起点在当前箭的终点之后,说明当前这支箭不能再穿过这个气球了,需要再射出一支新的箭,并将新的箭的终点设为当前气球的终点。

2024-06-24 18:03:37 397

原创 代码随想录算法训练营第31天| 134. 加油站、135. 分发糖果、860.柠檬水找零、 406.根据身高重建队列

状态:so easy思路:每次遍历时,如果当前的油量差(currTank)小于0,说明从当前起点无法到达下一个加油站。此时,将下一个加油站设为新的起点,并重置当前油量差(currTank)。最后检查总的油量差(totalTank),如果总的油量差大于等于0,说明存在一个合法的起点,使汽车能绕完整个环形路;否则不存在。

2024-06-22 20:57:34 345

原创 代码随想录算法训练营第30天| 122.买卖股票的最佳时机II、55. 跳跃游戏、 45.跳跃游戏II、 1005.K次取反后最大化的数组和

文档讲解:代码随想录状态:so easy思路:不用考虑操作的次数,其实只要有赚就拿下就行了。

2024-06-21 19:20:59 266

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

状态:so easy思路:对胃口和饼干大小排序,小胃口对应小饼干,不满足的话用下一块饼干试探。

2024-06-20 22:07:28 431

原创 代码随想录算法训练营第28天|491.递增子序列、46.全排列、47.全排列 II、332、重新安排行程、51、N皇后、37、解数独

状态:没做出来,原因是在used数组去重的用法不对,used数组是结合sort使用的,本题求自增子序列。思路:局部去重 Set, 在每层递归调用中定义一个 Set,记录当前层级已经使用过的元素,避免重复使用。使用pre记录上次的值,确保不递减。

2024-06-19 19:58:57 446

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

状态:还行,判断字符是否有效卡了好久思路:通过回溯算法遍历所有可能的分割方式,每个IP地址段必须是0到255之间的整数且不能有前导零,当选满4个合法段且字符串用完时加入结果集,否则立即回溯。

2024-06-18 14:20:49 375

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

状态:卡了一会儿思路:先排序,方便剪枝。允许数字重复使用,因此递归调用时传入当前索引i。

2024-06-17 15:24:23 197

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

状态:很多细节忘了思路:先画图,然后可以发现,从1到n中选择k个数,可以看成是一个递归过程,这个递归的深度就是k。然后遍历当前这层集合可以看作一个for循环,就是逐个元素尝试的过程。剪枝优化:画图时可以发现,有时for循环后面几个集合不满足条件可以提前结束。

2024-06-15 19:15:59 346

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

状态:还可以思路:如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。节点值小于low:如果节点的值小于low,则修剪后的树不会包含这个节点及其左子树,直接返回修剪后的右子树。节点值大于high:如果节点的值大于high,则修剪后的树不会包含这个节点及其右子树,直接返回修剪后的左子树。

2024-06-14 11:37:59 210

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

状态:只会昨天的方法,没有想到利用二叉搜索树的性质。思路:如果当前节点的值同时小于 p 和 q 的值,说明 p 和 q 都在当前节点的右子树,因此继续在右子树中查找。如果当前节点的值同时大于 p 和 q 的值,说明 p 和 q 都在当前节点的左子树,因此继续在左子树中查找。如果当前节点的值在 p 和 q 之间(包括等于 p 或 q),那么当前节点就是 p 和 q 的最近公共祖先。

2024-06-13 16:17:21 273

原创 代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

题目链接:530.二叉搜索树的最小绝对差文档讲解:代码随想录状态:还可以思路:使用中序遍历来遍历二叉搜索树。在中序遍历过程中,比较当前节点和前驱节点的值,更新最小差值。返回二叉搜索树中任意两个节点值的最小差值。

2024-06-12 14:37:04 216

原创 代码随想录算法训练营第二十天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

状态:索引一开始没搞对卡了会儿。思路:每次递归找到最大值的索引,然后按照这个索引划分左子树和右子树。

2024-06-11 22:43:11 341

Software Architecture in Practice

作者:Len Bass、Paul Clements、Rick Kazman 作者分享他们自身的经验,涵盖了设计、制定和验证系统的基本技术主题,还强调了大型系统设计的业务上文的重要性。根据不同的案例研究,描述成功的软件架构是什么样的。

2022-11-08

中南大学考研软件工程944思维导图

中南大学软件工程944已上岸,花了好多心血写得思维导图(主要是一刷课本啥都没记住),就算书本看不懂,把思维导图背熟了,画图题再好好练练110+轻轻松松!

2022-06-05

上百种简历应有尽有.7z

各种简历都有,上百套总有一套适合你

2021-04-20

完全卸载工具geek.7z

卸载,就要清的干干净净!

2021-04-20

品优购素材和代码.7z

来源于pink老师的素材

2021-03-31

学成在线.7z

学成在线案例和素材配合博客食用。

2020-07-18

空空如也

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

TA关注的人

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