自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【代码随想录】单调栈专题(Python)

若当前元素比栈顶元素大,循环尽此种情况,出栈记为mid,栈顶记为left,待入栈记为right,r=(min(right,left)-mid)*(ir-il-1)。对于每一列,找左边比它矮的坐标,和右边比它矮的坐标,ri=height[i]*(right-left-1)按列算,每列可以接雨水的值=min(左边最高列,右边最高列)-本列高度。入栈,循环与栈顶比较,若小则入栈,若大则记录答案并出栈。若当前元素比栈顶元素相等,出栈,再入栈;与1相比,整个数组处理两次即可。若当前元素比栈顶元素小,入栈;

2023-07-24 17:08:07 223

原创 【代码随想录】动态规划专题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 257

原创 【代码随想录】动态规划专题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 298 1

原创 【代码随想录】动态规划专题2(Python)

1049.最后一块石头的重量II题意:将石头分为尽可能均等的两份,求差即,尽可能装满sum()//2的背包,重量=价值返回值为sum-dp[-1]-dp[-1]

2023-07-14 21:06:50 344 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 527 1

原创 【代码随想录】贪心专题2(Python)

设置答案数组,填入第一个区间,遍历余下区间,若与前一个区间重叠,则修改答案数组中最后一个区间的右边界为最大值;目标值转为目标字符串,逆序遍历字符串,若前一个字符>当前字符,则前一个字符-1,flag=当前位置。若左右节点都为2,则返回0;若左右节点有一个为1,则返回2;若左右节点有一个为0,则返回1。先确定每个字母出现的最后位置,若当前最大位置==当前坐标,则按照规则加入返回值。先排序再遍历,若当前区间超出先前区间r+1,若未超出则修改缩减当前区间。后序遍历,未覆盖=0,已覆盖=2,有监控=1。

2023-06-30 22:10:00 202 1

原创 【代码随想录】贪心专题1(Python)

通过找出局部最优解,得到全局最优解。

2023-06-22 16:19:25 280 1

原创 【代码随想录】回溯专题2(Python)

单层逻辑:遍历列,找合法位置,递归下一行(横向:列数)单层逻辑:全部遍历,加入未使用过的从当前站出发的路线。遍历每一点,若合法,赋值,递归,回溯。没有startint,从0开始循环。检查棋盘是否合法:同列、左上、右上。终止条件:行数==n(纵向:行数)终止条件:如果全部使用过,就返回。合法:同行、同列、同方块。横向不重复,纵向不小于。3的基础上,横向不重复。与组合相同,横向剪枝。

2023-06-07 16:20:05 48 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 264

原创 【代码随想录】二叉树专题5(Python)

若是要删的节点:删左节点->返回其右子树递归;删右节点->返回其左子树递归。单层逻辑:root.val < val,递归右子树;5.若删除节点左空右空->右节点替代,左节点置于右子树最左节点的左节点。若root.val<key,右节点=右递归;取数组中值做根节点,左半作左子树,右半作右子树。若不是要删的节点:左=左递归,右=右递归。3.若删除节点左空右非空->右节点替代。4.若删除节点左非空右空->左节点替代。终止条件:若为空,返回目标值新节点。2.若删除节点是叶子节点->直接删。终止条件:空节点->空。

2023-05-19 20:40:39 151 1

原创 【代码随想录】二叉树专题4(Python)

终止条件:空/左/右->返回本身;左右自身均有返回值->返回本身。中序遍历求最小差,最大整数值 float(“inf”)中序遍历,记录上一节点。中序遍历结果是递增的。

2023-05-19 17:13:01 100 1

原创 【代码随想录】二叉树专题3(Python)

终止条件:叶子节点,深度比之前最大深度深,更新深度和结果值(相同深度只会被第一个节点修改结果值)单层逻辑:构建后序数组的根节点->找根节点在中序数组中的位置->将中序数组分出左右子树->根据。对于每个节点,返回当前点的左叶子值+左子树的左叶子和+右子树的左叶子和。3.单层逻辑:判断当前节点的左节点是否为左叶子,若是则加入结果值;终止条件:空节点返回None,中序数组长度为一时返回该节点。单层逻辑:如果有左子树,深度加一,递归,回溯;注意变量作用域、浅拷贝与深拷贝。2.终止条件:空节点,返回0。

2023-05-18 21:23:08 257 1

原创 【代码随想录】二叉树专题2(Python)

3.单层逻辑:路径+节点值;if左->左递归、路径回退;if右->右递归、路径回退。3.单层逻辑:比较左子树的右与右子树的左&&左的左与右的右。2.终止条件:左右均空为真,一空为假,异值为假。方法一:深度,层序遍历,遇到叶子节点则返回层数。1.参数:左子树和右子树,返回值:布尔值。前序遍历、层序遍历求深度;,左非0右非0->min(左,右)+1。2.终止条件:叶子节点->加入结果路径。1.参数:节点、路径、结果集。方法一:层序遍历,数节点数。方法二:高度,递归,递归后序遍历求高度,

2023-05-14 19:32:38 189

原创 【代码随想录】二叉树专题1(Python)

二叉树有两种存储方式:顺序存储(数组),链式存储。这里是链式存储的二叉树节点的定义方式。# 链式存储 class TreeNode : def __init__(self , val = 0 , left = None , right = None) : self . val = val。

2023-05-14 19:30:48 254 1

空空如也

空空如也

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

TA关注的人

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