自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 随想录算法训练营第六十天|84.柱状图中最大的矩形

【代码】随想录算法训练营第六十天|84.柱状图中最大的矩形。

2024-03-14 14:23:40 226 1

原创 随想录算法训练营第五十九天|503.下一个更大元素II、42.接雨水

【代码】随想录算法训练营第五十九天|503.下一个更大元素II、42.接雨水。

2024-03-13 23:34:53 401

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

【代码】随想录算法训练营第五十八天|739.每日温度、496.下一个更大元素 I。

2024-03-12 22:47:44 165

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

如果要知道Dp[i,j]是否回文子串,在得知Dp[i+1,j-1]是的情况下只需要判断两端S[i]是否等于S[j],是的话Dp[i,j]则是回文子串。

2024-03-11 15:39:46 627

原创 随想录算法训练营第五十五天|583.两个字符串的删除操作、72.编辑距离

代码和最长公共子串一个思路,只是最后返回值要处理一下。

2024-03-09 17:59:47 210

原创 随想录算法训练营第五十四天|392.判断子序列、115.不同的子序列

采用双指针,一个指针指向S的第一个元素,另一个指向T的第一个元素,采用一个For循环,字符串T到末尾就结束循环。在循环中如果两个元素相同,S的指针就后移一位,如果K指针来到S的末尾就返回True,否则都是False。

2024-03-08 11:06:13 407

原创 随想录算法训练营第五十三天|1143.最长公共子序列、1035.不相交的线、53.最大子序和 动态规划

将两个字符串转换为Char数组,然后与比较最长公共数字的题一样。

2024-03-07 15:51:17 369

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

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

2024-03-06 15:55:40 183

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

分为四种状态,达到买入股票状态(状态一),达到保持卖出股票状态(状态二),达到今天就卖出股票状态(状态三),达到冷冻期状态(状态四)。然后列出状态转移方程。

2024-03-06 00:02:38 745

原创 随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

该题股票只能够最多买卖两次,所以分成四种情况进行对应的初始化操作,1.第一次买入、2.第一次卖出、3.第二次买入、4.第二次卖出,因为都是Dp[0]天进行,所以买入都是-Price[0]。然后状态转移方程下面,第一次买入就去比较前一天买入了或者今天买入的口袋里的钱,第一次卖出所存在的状态就是前一天就卖出了或者今天在卖出,比较钱即可,第二次买入则是前一天就买入或者今天买入,谁收益大就是谁,同理第二次卖出则是前一天就卖出或者是今天卖出,比较收益,最终返回结束当天的第二次卖出后的收益即可。

2024-03-04 15:12:20 466

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

先遍历找到股票价格最低那天,然后一次减去最低值,哪个最大选哪个。

2024-03-02 14:39:32 358

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

Dp数组先排除Nums的特殊情况,然后分析是偷当前和上两个还是偷前一个更大,谁大取谁。

2024-03-01 15:35:07 319

原创 随想录算法训练营第四十六天|139.单词拆分

【代码】随想录算法训练营第四十六天|139.单词拆分。

2024-03-01 15:20:59 85

原创 随想录算法训练营第四十五天|322.零钱兑换、279.完全平方数

此题可以采用完全背包来做,因为每个数可以多次使用,同时只考虑方法数所以先物品后背包和先背包后物品均可实现,状态转移方程为Dp[j]=Math.Min(Dp[j],Dp[j-coins[i]]+1),最终返回结果时候看是否为最大值,最大值则说明零钱找不齐,返回-1。

2024-02-28 23:53:24 406

原创 随想录算法训练营第四十四天|零钱兑换II、377.组合总和Ⅳ

背包问题,但是是每个数可以使用多次即完全背包问题,相比起01背包,完全背包既可以先物品在背包也可以先背包再物品,但这道题不考虑组合,相同种类只算一个,所以先物品后背包,状态转移方程采用Dp[j]+=Dp[j-coins[i]],最终返回结果。

2024-02-27 11:21:51 302

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

明确是一道动态规划题目,也是背包问题,每个数只能使用一次所以是01背包问题,稍加改造可得出状态转移方程Dp[j]=Math.Max(Dp[j],Dp[j-stones[i]]+stones[j])内层循环依旧是倒序处理。要想使得最后的石头重量最小,那就要将数组分成两堆,并且两堆总和差值越小越好,所以将Target设定大小为数组总和Sum的一半,最终返回结果即可。

2024-02-26 15:41:26 461

原创 代码随想录算法训练营第四十一天|416.分割等和子集

首先要确定的是一个数只能用一次所以使用01背包问题,要想使两个数组的和相同那Nums数组一定要是偶数和才行,其次要找到偶数和的一班作为背包的Target,也就是01背包的最大价值,其中内层要采用倒序才能避免重复相加,在一维数组的基础上稍作修改,Dp[j]=Math.Max(Dp[j],Dp[j-Nums[i]]+Nums[i])最终判断DP数组是否为Target是的话则成功。

2024-02-24 21:38:24 411

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

Dp数组首先初始化,0最大为0,1拆分为1*0,2拆分为1*1,即Dp[0]=0,Dp[1]=0,Dp[2]。所以每个Dp都被拆成j*(i-j)或Dp[i-j]*j哪个大选哪个,最后得出Dp[N]。

2024-02-23 11:27:47 394

原创 代码随想录算法训练营第三十九天|62.不同路径、63.不同路径 II

首先创建一个符合题目要求的二维Dp数组,然后初始化,每一列每一行都为一条路,所以Dp[i,0]=1,Dp[0,j]=1。因为终点只有两种达成方式,所以状态转移方程为Dp[i,j] = Dp[i-1,j] + Dp[i,j-1],最终返回终点位置的Dp即可。

2024-02-22 16:59:25 421

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

首先分析状态转移方程,斐波那契数是由前面两个数加起来组成当前数,所以Dp[i]=Dp[i-1]+Dp[i-2],如果N小于2,则直接返回N,因为第一个数是0,第二个数1,所以Dp[0]=0,Dp[1]=1,所以结合状态方程最终返回出Dp[n]的值。

2024-02-21 16:49:25 1208

原创 代码随想录算法训练营第三十七天|738.单调递增的数字

先将输入的数字转换成Char数组类型储存,便于单个遍历以及修改,然后从最后一个依次向前遍历,如果第I个比第I-1个小,那Idx指针记录当前位置说明需要后续改变为9,同时处理I-1处减小1,当天减小操作处理完后将Idx后的所有数字都变为9则符合题意。

2024-02-20 17:11:48 326

原创 代码随想录算法训练营第三十六天|435.无重叠区间、763.划分字母区间、56.合并区间

按右边排序,如果现阶段起点小于上阶段终点Cnt++,并且更新现阶段的终点为最短的终点,最终返回Cnt。

2024-02-20 00:20:49 150

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

该题直接分情况讨论,收到五元、十元、二十元三种情况,分别对五元和十元两种面值计数,二十元则有两种补发十元不等于零则一张五一张十,若等于零直接三张无,最终如果五元数量为负数则说明补不起所以就返回False,否则为True。

2024-02-18 19:40:02 408

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

先排序,每次都找到最小的数然后反转,然后计数如果所有负数反转完成之前达到K直接求和,如果K有多余了就去反复反转最小的,然后求和就行。

2024-02-17 00:35:00 398

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

第二天买入减去前一天买入如果为正值就累加,如果为其他就加上零,因为只有正数才能做贡献。

2024-02-15 21:48:26 266

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

先将两个数组排序成从小到大的顺序,然后两个指针分别指向两个数组的起始位置,当I指针没遍历完人数数组之前进行循环,终止条件为J指针遍历完了饼干数组直接返回Ans结果,两个数组挨个比较,如果饼干大于等于人数两个数组均向后移动一个,否则饼干数组向后移动一个位置继续与当天人数进行比较,知道触碰终止条件。

2024-02-15 21:34:43 202

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

在上一题的基础上因为不能用重复的元素所以需要对其进行排序操作并且相邻元素相同并且前一个为False则要跳过,树层上如果当前元素Used数组为False则说明未使用,那就加入到Path当中,回溯操作后要变回False。全排列不是组合故此用不到Startindex,收获条件则是Path长度和数组长度一样,需要一个Used数组来记录当前元素是否被收录,被收录则跳过,去收录另外的即可。

2024-02-07 17:06:38 220

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

在上一题的基础上加入了一个Used的Bool类型数组,因为我们需要在树层上剪枝,树枝上保留,所以如果当树层向下遇到了两个相邻的相同元素,就去看前一个的Used数组是否为False,如果是就跳过,否则就加入Path,最终返回即可。本题的结束条件就是Ip地址的分割点为3个就收集Path,但是除了这个还要判断是否地址合理在0-255的范围内,如果合法就打上分隔符,然后递归,然后回溯,最终返回所收集到的结果。自己收进Path的条件是直接收集就行,但要注意Startindex的取值是I+1,因为不能有重复的。

2024-02-07 00:13:19 289

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

因为只能用一次所以Startindex一定是I+1递归,其次就是要把传入的数组排序,然后判断是否相邻的元素相同,相同则要跳过,同时要引入一个Bool类型的Used数组来排除相同的Path结果。与普通的回溯大体框架相比,则是在此基础上加入了回文子串的判断,也就是双指针一头一尾,分别往中间走,重合之前都没Return则是回文子串,二次每个只能用一次,所以是I+1递归。

2024-02-06 00:43:58 204

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

需要将每一个按键对应的字母转换成String数组储存,然后返回条件是Startindex走完了输入的字符串长度,每一个都要减去零的Ascii码做一个转换才行,其余处理和普通回溯一样。和普通的相比只需要限定一个和值条件就行,因为都只能用一次,所以StartIndex和普通版本一样。17.电话号码的字母组合。

2024-02-06 00:33:59 379

原创 代码随想录算法训练营第二十四天|77. 组合

这题的终止条件就是单个路径个数为K就可以添加返回了,然后有一个StartIndex用于向后遍历防止重复。遇到新的就加入路径Path里面,然后然后递归执行新节点下面的分支,最后删除该节点放入新的元素该过程就叫回溯。

2024-02-02 20:33:38 414

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

首先如果根节点为空则直接返回空,如果根节点的值小于Low,由于是二叉搜索树所以不用往左继续去寻找,那就往右寻找一个满足条件的节点,同理节点大于High值则往左寻找第一个满足条件的节点,处理完一个的逻辑接着就去左右子树递归调用,最终返回根节点。

2024-02-01 16:08:59 358 1

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

参考二叉树最近公共祖先流程。

2024-01-31 16:34:03 187 1

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

采取后序遍历的方法(左右中),左右分别取递归,然后中节点处判断两边是否为空(即是否找到了P或Q)如果是则中节点返回,是最近的公共祖先。如果左边递归结果为空,右边不为空则返回右侧结果,同理右为空左不为空返回左侧结果,如果都不满足就返回Null。先层序遍历将每个节点的值加入到数组里并排序,然后遍历数组将每个元素加入到字典里,比较字典里的Value值,大的那个加入到列表里,如果有更大的,就把列表清空然后重新加入,如果有和和最大值相同的Value直接将对应Key加入列表无需清空,最终将列表转成数组返回即可。

2024-01-30 16:26:15 658 1

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

首先排除数组为0的情况,然后遍历数组找出最大值的索引Index,然后以数组最大值创建一个新的根节点并作为值,然后用迭代对Index左边的数组找到左子树,Index右边的数组找到右子树。617.合并二叉树如果数一为空则补上数二节点,如果数二为空则补上数一节点,然后当前节点值为数一数二对应值相加,然后递归左节点和右节点,最终结束返回数一根节点。700.二叉搜索树中的层序遍历找到该节点的值为目标值时直接返回当前节点,否则返回空。

2024-01-29 19:48:21 300 1

原创 代码随想录算法训练营第十八天|513.找树左下角的值、112.路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树

空节点直接返回False,结束条件另一个则是左节点和右节点为空,TargetSum刚好等于该节点值即成功了,如果不中,则继续递归左节点,目标值就需要减去当前节点值,然后同时去递归右节点也减去当前值,两个任意一个找到了都是True。代码不多但逻辑性很强,需要在后续数组最后一个找到根节点,然后在前序数组里面找到这个根节点记录Index将其左右隔开,然后前序的左前序则是Index左部分,index右部分则是后续的左后续,剩下的同理,然后递归结束返回根节点即可。首先排除根为空节点,然后构造一个函数A用于实现功能。

2024-01-28 16:19:53 441 1

原创 代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

申明一个GetHeight()函数用于判断是否为二叉平衡树并且实现递归,如果传入的节点为空则返回0,如果有左右节点就去判断是否为-1也就是说左右子树的差的绝对值是否大于1,如果不是则返回1加上左右子树较大的那个值作为以该节点为根的一个高度,处理完成后再主函数里判断是否返回值为-1,如果是则说明非平衡树,不为-1则是二叉平衡树。

2024-01-28 15:58:50 398 1

原创 代码随想录算法训练营第十六天| 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

如果根节点为空,直接返回零,如果根的左右两个子树为空,就返回1,左右节点都非空,那就取左右节点递归后最小的那个值加1。左节点不为空那就递归左节点然后加1返回,同理右节点非空的时候。最后都不中就返回1。直接用层序遍历的流程操作即可,只是在求Size的时候每次进行一个Sum+=Size的累加最终将Sum返回出去即可。如果遇到当前节点为空就返回0,然后分别去递归节点的左右两个子树,哪个大取哪个,最后加上根节点的一个深度返回即可。222.完全二叉树的节点个数。111.二叉树的最小深度。

2024-01-25 23:36:51 412

原创 代码随想录算法训练营第十五天|层序遍历、226.翻转二叉树、101.对称二叉树 2

申请一个队列,一个Ans的返回列表,首先排除头结点为空的情况,然后将根节点入栈进行While循环,如果队列不为空则继续,一个Size记录每层元素的个数,记录每一次出队列的节点并将其的值加入到列表里面,然后当前节点如果左右节点都不为空则一次进入队列进行循环,每层结束后Size为0单独将每一层加入到Ans队列里面,最后结束大循环然后返回出去。

2024-01-24 23:22:07 484 1

原创 代码随想录算法训练营第十四天|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历

创建一个储存二叉树值得列表,然后排除特殊情况——头结点为空,直接返回空列表,如果不为空则运行递归的函数部分。递归部分则判断传入的的该节点是否为空,为空直接返回给上一层,如果不为空则将自己加入到列表里,然后递归自己的左右节点,前序遍历的顺序就是中左右。

2024-01-24 00:16:53 732 1

空空如也

空空如也

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

TA关注的人

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