![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录
文章平均质量分 71
记录代码随想录对应专栏内容
s-ure
这个作者很懒,什么都没留下…
展开
-
【代码随想录】二叉树专题1(Python)
二叉树有两种存储方式:顺序存储(数组),链式存储。这里是链式存储的二叉树节点的定义方式。# 链式存储 class TreeNode : def __init__(self , val = 0 , left = None , right = None) : self . val = val。原创 2023-05-14 19:30:48 · 244 阅读 · 1 评论 -
【代码随想录】二叉树专题2(Python)
3.单层逻辑:路径+节点值;if左->左递归、路径回退;if右->右递归、路径回退。3.单层逻辑:比较左子树的右与右子树的左&&左的左与右的右。2.终止条件:左右均空为真,一空为假,异值为假。方法一:深度,层序遍历,遇到叶子节点则返回层数。1.参数:左子树和右子树,返回值:布尔值。前序遍历、层序遍历求深度;,左非0右非0->min(左,右)+1。2.终止条件:叶子节点->加入结果路径。1.参数:节点、路径、结果集。方法一:层序遍历,数节点数。方法二:高度,递归,递归后序遍历求高度,原创 2023-05-14 19:32:38 · 182 阅读 · 0 评论 -
【代码随想录】二叉树专题3(Python)
终止条件:叶子节点,深度比之前最大深度深,更新深度和结果值(相同深度只会被第一个节点修改结果值)单层逻辑:构建后序数组的根节点->找根节点在中序数组中的位置->将中序数组分出左右子树->根据。对于每个节点,返回当前点的左叶子值+左子树的左叶子和+右子树的左叶子和。3.单层逻辑:判断当前节点的左节点是否为左叶子,若是则加入结果值;终止条件:空节点返回None,中序数组长度为一时返回该节点。单层逻辑:如果有左子树,深度加一,递归,回溯;注意变量作用域、浅拷贝与深拷贝。2.终止条件:空节点,返回0。原创 2023-05-18 21:23:08 · 236 阅读 · 1 评论 -
【代码随想录】二叉树专题4(Python)
终止条件:空/左/右->返回本身;左右自身均有返回值->返回本身。中序遍历求最小差,最大整数值 float(“inf”)中序遍历,记录上一节点。中序遍历结果是递增的。原创 2023-05-19 17:13:01 · 95 阅读 · 1 评论 -
【代码随想录】二叉树专题5(Python)
若是要删的节点:删左节点->返回其右子树递归;删右节点->返回其左子树递归。单层逻辑:root.val < val,递归右子树;5.若删除节点左空右空->右节点替代,左节点置于右子树最左节点的左节点。若root.val<key,右节点=右递归;取数组中值做根节点,左半作左子树,右半作右子树。若不是要删的节点:左=左递归,右=右递归。3.若删除节点左空右非空->右节点替代。4.若删除节点左非空右空->左节点替代。终止条件:若为空,返回目标值新节点。2.若删除节点是叶子节点->直接删。终止条件:空节点->空。原创 2023-05-19 20:40:39 · 146 阅读 · 1 评论 -
【代码随想录】回溯专题1(Python)
回溯二叉树的宽度为每个数字对应字母的个数,深度为digits的长度。横向:目标串长度(startint,len(s))超过3位数不合法。剪枝:利用used数组,剪去横枝(与前一相同的枝不要),保留竖枝。横向:目标串长度,i(startint+1:len(s)+1)终止条件增加:sum>target即return。剪枝:for循环中范围值剪枝,sum大小剪枝。剪枝:sum+i > target则结束循环。纵向:3(最后一段判断是否合法)注:candidates要排序。纵向:起始位置>=目标串长度。原创 2023-05-24 21:46:28 · 246 阅读 · 0 评论 -
【代码随想录】回溯专题2(Python)
单层逻辑:遍历列,找合法位置,递归下一行(横向:列数)单层逻辑:全部遍历,加入未使用过的从当前站出发的路线。遍历每一点,若合法,赋值,递归,回溯。没有startint,从0开始循环。检查棋盘是否合法:同列、左上、右上。终止条件:行数==n(纵向:行数)终止条件:如果全部使用过,就返回。合法:同行、同列、同方块。横向不重复,纵向不小于。3的基础上,横向不重复。与组合相同,横向剪枝。原创 2023-06-07 16:20:05 · 40 阅读 · 1 评论 -
【代码随想录】贪心专题1(Python)
通过找出局部最优解,得到全局最优解。原创 2023-06-22 16:19:25 · 259 阅读 · 1 评论 -
【代码随想录】贪心专题2(Python)
设置答案数组,填入第一个区间,遍历余下区间,若与前一个区间重叠,则修改答案数组中最后一个区间的右边界为最大值;目标值转为目标字符串,逆序遍历字符串,若前一个字符>当前字符,则前一个字符-1,flag=当前位置。若左右节点都为2,则返回0;若左右节点有一个为1,则返回2;若左右节点有一个为0,则返回1。先确定每个字母出现的最后位置,若当前最大位置==当前坐标,则按照规则加入返回值。先排序再遍历,若当前区间超出先前区间r+1,若未超出则修改缩减当前区间。后序遍历,未覆盖=0,已覆盖=2,有监控=1。原创 2023-06-30 22:10:00 · 193 阅读 · 1 评论 -
【代码随想录】动态规划专题1(Python)
例如dp[3]=dp[0]*dp[2]+dp[1]*dp[1]+dp[2]*dp[0]初始化时,首行首列遇到障碍物后续都为0,其余部分障碍物为0。dp[i] = dp[左树]*dp[右树] 的和。dp[i]表示i个节点的二叉树的构成方式总数。dp[i]表示拆分i可得的最大乘积。dp[i]表示到第i阶的最小花费。每个格子只能由上格和左格走到。原创 2023-07-02 15:24:06 · 496 阅读 · 1 评论 -
【代码随想录】动态规划专题2(Python)
1049.最后一块石头的重量II题意:将石头分为尽可能均等的两份,求差即,尽可能装满sum()//2的背包,重量=价值返回值为sum-dp[-1]-dp[-1]原创 2023-07-14 21:06:50 · 309 阅读 · 1 评论 -
【代码随想录】动态规划专题3(Python)
与20的区别:dp[i][0]=max(之前持有,买了)=max(dp[i-1][0],dp[i-1][1]-price[i])dp[i][1] = max(之前第一次持有dp[i-1][1],第一次买入dp[i-1][0]-prices[i])dp[i][1]=max(之前不持有,卖了)=max(dp[i-1][1],dp[i-1][0]+price[i])dp[i][0]=max(之前持有,买了)=max(dp[i-1][0],-price[i])dp[i][0]持有,dp[i][1]不持有。原创 2023-07-20 20:11:33 · 282 阅读 · 1 评论 -
【代码随想录】动态规划专题4(Python)
s[j]时,dp[i][j] = max(dp[i][j-1],dp[i+1][j])s[i]==s[j]时,dp[i][j] = dp[i+1][j-1]+2,长度+2。s[i]==s[j]时,若ij相等或相邻,或s[i:j]回文,则回文串数量+1。若两个当前值相等,dp[i][j] = dp[i-1][j-1]+1。若相同,带t[i]的子序列数+在s[:j]中删掉s[j]dp[i][j]表示s[i:j]回文子序列数量。dp[i][j]表示s[i:j]是否回文。若相同,和dp[i-1][j-1]一样。原创 2023-07-22 16:16:01 · 238 阅读 · 0 评论