自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营| 总结篇

之前刷题不管算法,只管能不能a,没有章法,只有一套乱拳,现在看到题目,会想着思考分析一下,可以用什么方法,用什么思路来解决。坚持了六十多天的算法,回头看感觉收获很大。

2025-03-17 18:16:54 194

原创 代码随想录算法训练营第六十六天| 图论11

Floyd 算法代码很简单,但真正理解起原理 还是需要花点功夫,大家在看代码的时候,会发现 Floyd 的代码很简单,甚至看一眼就背下来了,但我为了讲清楚原理,本篇还是花了大篇幅来讲解。一般 笔试或者 面试的时候,不会考察A*, 都是会结合具体业务场景问 A*算法,例如:地图导航,游戏开发 等等。其实基础版的A* 并不难,所以大家不要畏惧,理解本篇内容,甚至独立写出代码,大家可以做到,加油。A * 算法精讲 (A star算法)最各个最短路算法有个全面的了解。Floyd 算法精讲。

2025-03-17 17:46:16 283

原创 代码随想录算法训练营第六十五天| 图论10

Bellman_ford 队列优化算法(又名SPFA)bellman_ford之单源有限最短路。bellman_ford之判断负权回路。

2025-03-17 17:43:17 510

原创 代码随想录算法训练营第六十四天| 图论09

dijkstra(堆优化版)精讲。Bellman_ford 算法精讲。

2025-03-17 17:39:19 256

原创 代码随想录算法训练营第六十三天| 图论08

后面几天都是最短路系列了,对于最短路系列,我的建议是,如果第一次接触最短路算法的话,对于一刷的录友们,不要强行去逼迫自己去学透,很难刚接触到最短路算法就学透。,二刷的时候 再尝试自己去写出来。三刷的时候,差不多才能把最短路吃透。拓扑排序看上去很复杂,其实了解其原理之后,代码不难。能看懂原理,能照着代码随想录把代码抄下来就可以了。dijkstra(朴素版)精讲。

2025-03-17 17:19:17 229

原创 代码随想录算法训练营第六十二天| 图论07

kruskal算法精讲。

2025-03-17 17:14:46 127

原创 代码随想录算法训练营第六十一天| 图论06

上面两道题目是不是感觉做出自信了,感觉并查集不过如此?并查集应用类题目,关键是如何把题意转化成并查集问题。来这道题目 给大家适当一些打击, 难度上来了。109. 冗余连接II。

2025-03-17 15:05:56 173

原创 代码随想录算法训练营第五十九天| 图论05

明确并查集解决什么问题,代码如何写,对后面做并查集类题目很有帮助。并查集裸题,学会理论基础后,本题直接可以直接刷过。并查集理论基础很重要。

2025-03-17 15:01:11 337

原创 代码随想录算法训练营第五十八天| 力扣热题100

这个默认值的类型由传入的参数决定。例如,defaultdict(list)中的list就是告诉Python,当键不存在时,自动创建一个新的列表作为该键的值。defaultdict是collections模块中的一个类,它和普通字典不同之处在于,sorted(list)不修改原列表,返回排序后的新列表。利用集合的性质去重后排序。

2025-03-06 16:18:36 359

原创 代码随想录算法训练营第五十七天| 图论03

基础题目 可以自己尝试做一做。把处于边界上的岛屿全部消除,剩下的就是孤岛。

2025-03-05 15:15:32 326

原创 代码随想录算法训练营第五十六天| 图论02

注意深搜的两种写法,熟练掌握这两种写法 以及 知道区别在哪里,才算掌握的深搜。注意广搜的两种写法,第一种写法为什么会超时,如果自己做的录友,题目通过了,也要仔细看第一种写法的超时版本,弄清楚为什么会超时,因为你第一次 幸运 没那么想,第二次可就不一定了。深度搜索,定义上下左右四个方向,找到一个第一个邻接矩阵就递归该点的上下左右,避免重复计算。版本一的写法是 :下一个节点是否能合法已经判断完了,传进dfs函数的就是合法节点。

2025-03-04 20:50:20 483

原创 代码随想录算法训练营第五十五天| 图论01

大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。理论基础大家先对各个概念有个印象就好,后面在刷题的过程中,每个知识点都会得到巩固。了解一下深搜的原理和过程。98. 所有可达路径。

2025-03-03 10:50:04 560

原创 代码随想录算法训练营第五十三天| 单调栈02

从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序。一旦发现添加的柱子高度大于栈头元素了,此时就出现凹槽了,栈头元素就是凹槽底部的柱子,栈头第二个元素就是凹槽左边的柱子,而添加的元素就是凹槽右边的柱子。建议是掌握 双指针 和单调栈,因为在面试中 写出单调栈可能 有点难度,但双指针思路更直接一些。在时间紧张的情况有,能写出双指针法也是不错的,然后可以和面试官在慢慢讨论如何优化。接雨水这道题目是 面试中特别高频的一道题,也是单调栈 应用的题目,大家好好做做。有了之前单调栈的铺垫,这道题目就不难了。

2025-03-02 13:54:23 509

原创 代码随想录算法训练营第五十二天| 单调栈01

大家可以读题,思考暴力的解法,然后在看单调栈的解法。就能感受出单调栈的巧妙。这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做。本题和 739. 每日温度 看似差不多,其实 有加了点难度。今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。使用单调栈主要有三个判断条件。496.下一个更大元素 I。503.下一个更大元素II。

2025-02-28 22:02:37 585

原创 代码随想录算法训练营第五十一天| 动态规划13

确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。

2025-02-27 12:36:25 713

原创 代码随想录算法训练营第五十天| 动态规划12

但相对于刚讲过 392.判断子序列,本题 就有难度了 ,感受一下本题和 392.判断子序列 的区别。dp[i][j]表示以s[i-1]结尾的子序列中,出现以t[j-1]结尾的t的个数注意初始化时,dp[0][0]的值不要重复初始化,应该为1,空字符串s删除0个元素可以变成空字符串t。

2025-02-26 10:34:24 575

原创 代码随想录算法训练营第四十九天| 动态规划11

直线不能相交,这就是说明在字符串nums1中 找到一个与字符串nums2相同的子序列,且这个子序列不能改变相对顺序,只要相对顺序不改变,连接相同数字的直线就不会相交。dp[i][j]表示长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列。dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]dp[i]表示,以nums[i]结尾的子序的最大和。这道题我们用贪心做过,这次 再用dp来做一遍。

2025-02-25 17:50:44 511

原创 代码随想录算法训练营第四十八天| 动态规划10

dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]动态规划:300.最长递增子序列 最大的区别在于“连续”。今天开始正式子序列系列,本题是比较简单的,感受感受一下子序列题目的思路。思路与上一题一致,在判断的时候是判断i和i-1索引下nums的数值大小。dp[i]表示从开头到以nums[i]结尾中的最长递增子序列长度。因此,比较nums[i]与之前每一个num大小。这样不需要单独处理初始化部分。718. 最长重复子数组。300.最长递增子序列。

2025-02-24 11:44:50 548

原创 代码随想录算法训练营第四十六天| 动态规划09

这是昨天最佳时机III的进阶,昨天最多卖2次,有五个状态,这回最多卖k次,有2k+1个状态,参照昨天的方式即可,注意考虑状态之间的联系。

2025-02-22 10:31:43 660

原创 代码随想录算法训练营第四十五天| 动态规划08

dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。dp[i][0]表示的是截至第i天股票的最小值,取负数。dp[i][1]表示的是截至第i天股票的最大利润。123.买卖股票的最佳时机III。122.买卖股票的最佳时机II。121. 买卖股票的最佳时机。不需要二维数组,一维就可以解决。一天一共就有五个状态,

2025-02-21 15:28:20 726

原创 代码随想录算法训练营第四十四天| 动态规划07

在上一题的基础上修改,考虑两种情况,去头或去尾,两种情况返回最大选项。1. 下标为 0 记录 **不偷该节点** 所得到的的最大金钱。2. 下标为 1 记录 **偷该节点** 所得到的的最大金钱。确定递推公式很重要,在递推公式的提示下可以写出该题。dp[i]表示截至第i个房间偷到的最大金额。337.打家劫舍III。213.打家劫舍II。

2025-02-20 12:01:12 318

原创 代码随想录算法训练营第四十三天| 动态规划06

本题 和 322. 零钱兑换 基本是一样的,大家先自己尝试做一做。如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。这句话结合本题 大家要好好理解。

2025-02-19 15:51:08 446

原创 代码随想录算法训练营第四十二天|动态规划05

注意,完全背包二维dp数组 和 01背包二维dp数组 递推公式的区别,01背包中是 dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]),完全背包是dp[i][j] = max(dp[i - 1][j], dp[i][j - weight[i]] + value[i])如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。518. 零钱兑换 II。377. 组合总和 Ⅳ。

2025-02-19 12:04:07 419

原创 代码随想录算法训练营第四十一天|动态规划04

通过这道题目,大家先粗略了解, 01背包,完全背包,多重背包的区别,不过不用细扣,因为后面 对于 完全背包,多重背包 还有单独讲解。大家重点理解 递推公式:dp[j] += dp[j - nums[i]],这个公式后面的提问 我们还会用到。2. dp[j]数组表示的是当背包重量为j时,背包的最大价值。1049. 最后一块石头的重量 II。很像了,可以尝试先自己思考做一做。1. 目标值为总和的一半。416. 分割等和子集。

2025-02-18 10:59:22 440

原创 代码随想录算法训练营第三十九天| 动态规划03

注意点:1. dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。

2025-02-15 18:37:12 436

原创 代码随想录算法训练营第三十八天| 动态规划02

本题大家掌握动态规划的方法就可以。数论方法 有点非主流,很难想到。注意点:1. dp表示的是从原点到坐标点的路径有几条2. 递推公式dp[i][j]=dp[i-1][j]+dp[i][j-1]

2025-02-15 17:56:31 428

原创 代码随想录算法训练营第三十七天| 动态规划01

2. 到n时,最后一步可以是1或者2,如果最后一步是1的话,那么前面有dp[n-1]种方法,若最后一步是2的话,则前面有dp[n-2]种方法。这道题目力扣改了题目描述了,现在的题目描述清晰很多,相当于明确说 第一步是不用花费的。很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。本题大家先自己想一想, 之后会发现,和 斐波那契数 有点关系。2. 循环要到n,这样才登顶,若到n-1,则还差最后一步。1. dp[i]表示的是到达i所需要的最小花销。746. 使用最小花费爬楼梯。

2025-02-13 12:05:39 820

原创 代码随想录算法训练营第三十六天| 贪心算法05

2. 从右向左遍历,若当前位比前一位小,那么前一位数字应该减1,当前位及后面的每一位均为9则为最大数。本题也是重叠区间问题,如果昨天三道都吸收的话,本题就容易理解了。1. 数字转成列表形式,便于对每一位进行操作。2. 找到重叠区间,修改intervals。3. 放入结果的时候注意最后一组元素。738. 单调递增的数字。

2025-02-12 19:21:28 538

原创 代码随想录算法训练营第三十五天| 贪心算法04

重叠区间问题,注意点:1. 只要points长度不为0,那么至少是需要一只箭的,所以result初始值为12. 排序后,如果当前元素第一个值比前一个元素最后一个值小,那么说明不在一个区间里3. 在相同区间里的话,需要选择最短尾端。

2025-02-11 20:44:23 550

原创 代码随想录算法训练营第三十四天| 贪心算法03

本题有点难度,不太好想,推荐大家熟悉一下方法二注意点:1. 每一站加油量减去耗油量的总和小于0说明跑不完一圈2. 当前站加油量减去耗油量小于0说明跑不到下一站,计数从下一站开始。

2025-02-10 21:55:52 603

原创 代码随想录算法训练营第三十三天| 贪心算法02

本题解法很巧妙,本题大家可以先自己思考一下然后再看题解,会有惊喜!这道题挺容易的,一次ac,每次后一天减前一天是否有正收益,有即累加,可得到最大利益。

2025-02-09 13:00:33 693 1

原创 代码随想录算法训练营第三十二天| 贪心算法01

这个四步其实过于理论化了,我们平时在做贪心类的题目时,如果按照这四步去思考,真是有点“鸡肋”。做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。

2025-02-08 11:04:59 467

原创 代码随想录算法训练营第三十一天| 回溯算法04

这题需要注意的点:1. path长度在2以上才放入最终结果2. 需要记录已经使用过的数字,因为数组内可能存在重复数字3. 比较递增时,是nums[i]和path[-1]比,而不是nums[i]和nums[i-1]比,因为nums[i-1]不一定在path里。

2025-02-07 20:36:39 496

原创 代码随想录算法训练营第三十天| 回溯算法03

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了。

2025-02-06 22:07:28 355

原创 代码随想录算法训练营第二十九天| 回溯算法02

本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制对应组合可以写出来,注意startIndex以及剪枝tiaojian。

2025-02-06 21:46:30 334

原创 代码随想录算法训练营第二十八天| 回溯算法01

对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现 写回溯算法套路。在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。path[:] 在 Python 中表示创建 path 列表的浅拷贝。它的作用是生成一个新的列表,其内容与 path 相同,但它们是不同的对象。

2025-02-06 21:25:11 420

原创 代码随想录算法训练营| 二叉树总结

涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。二叉树的理论基础:二叉树种类、存储方式、遍历方式、定义方式。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。二叉树属性:对称、深度、节点、平衡、路径、回溯。二叉树遍历:深度优先和广度优先。修改与构造:反转、构造、合并。

2025-02-06 20:54:47 325

原创 代码随想录算法训练营第二十七天| 二叉树8

这道题目比较难,比 添加增加和删除节点难的多,建议先看视频理解。题目链接/文章讲解:视频讲解:如果当前节点不在范围内,直接舍弃它,递归返回合适的子树。如果当前节点在范围内,递归修剪左右子树。

2025-02-06 20:50:58 343

原创 代码随想录算法训练营第二十天| 二叉树7

相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。分左右子树情况讨论。

2025-02-06 17:57:05 290

原创 代码随想录算法训练营第十八天| 二叉树6

和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。需要领悟一下二叉树遍历上双指针操作,优先掌握递归。本题其实是比较难的,可以先看我的视频讲解。可以先自己做做看,然后看我的视频讲解。530.二叉搜索树的最小绝对差。530.二叉搜索树的最小绝对差。236. 二叉树的最近公共祖先。501.二叉搜索树中的众数。

2025-01-30 23:50:20 419

空空如也

空空如也

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

TA关注的人

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