- 博客(62)
- 收藏
- 关注
原创 代码随想录算法训练营打卡第57天:prim算法,kruskal算法
与刚才的题目是一样的只不过换了一种方法去解决,使用了并查集,首先先用并查集的模板初始化一个并查集,同时创建一个边的对象,接着将输入的值进行赋值,然后用自定义规则对边对象进行排序。第一步,选距离生成树最近节点。第二步,最近节点加入生成树。第三步,更新非生成树节点到生成树的距离(即更新minDist数组)prim算法的目的就是找到最小生成树。prim算法核心就是三步,我称为。
2025-02-07 11:08:34
243
原创 代码随想录算法训练营打卡第56天
前言今天依旧是并查集的一天,一共有两题,第一道题感觉还可以,第二道题研究了之后直接放弃,感觉还不适合我现在的水平。。。冗余连接。
2025-02-05 15:12:48
195
原创 代码随想录算法训练营打卡第53天:110.字符串接龙 ,105.有向图的完全可达性 ,106.岛屿的周长
【代码】代码随想录算法训练营打卡第53天:110.字符串接龙 ,105.有向图的完全可达性 ,106.岛屿的周长。
2025-01-22 15:39:44
198
原创 代码随想录算法训练营打卡第52天:孤岛的总面积,沉没孤岛,水流问题,建造最大岛屿
很长时间没有打卡了,一方面是因为年底的事情太多了,还有一方面就是图论对于我目前的水平来说属实有些难,就连这四题我都做了有一个星期,害废话不多说,开搞。101.孤岛的总面积。104.建造最大岛屿。
2025-01-20 14:42:37
168
原创 代码随想录算法训练营打卡第50天:98. 所有可达路径
代码随想录算法训练营打卡第50天,中间太忙了有十天没有打卡55555,希望能追上。98. 所有可达路径。
2024-12-30 16:57:12
139
原创 代码随想录算法训练营打卡第49天:Leetcode 42. 接雨水 ,84.柱状图中最大的矩形
zaccheo打卡算法训练营第49天。Leetcode42.接雨水。
2024-12-22 14:56:39
196
原创 代码随想录算法训练营打卡第48天:Leetcode739. 每日温度 , 496.下一个更大元素 I,503.下一个更大元素II
zaccheo打卡算法训练营第48天。Leetcode739. 每日温度。503.下一个更大元素II。496.下一个更大元素 I。
2024-12-19 17:25:08
99
原创 代码随想录算法训练营打卡第45天:Leetcode115.不同的子序列 ,583. 两个字符串的删除操作, 72. 编辑距离
首先先定义dp数组,dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]如果需要替换字符相等,则说明替换之后就变成了i-1处元素和j-1处元素相等,则dp[i][j]=dp[i-1][j-1]+1;当元素不相等时,dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);当i-1处元素和j-1处元素相等时,dp[i][j]=dp[i-1][j-1]+1;zaccheo打卡算法训练营第45天。
2024-12-17 14:53:07
350
原创 代码随想录算法训练营打卡第44天:1143.最长公共子序列 , 1035.不相交的线 , 53. 最大子序和 ,392.判断子序列
这道题之前在贪心章节用贪心算法AC过,在动态规划章节当然得用dp的方法了,首先定义dp数组,dp[i]代表第i个元素前的最大数组和,接着递推公式,由于求的是最大的数组和,于是dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);Leetcode1143.最长公共子序列。zaccheo打卡算法训练营第44天。Leetcode1035.不相交的线。Leetcode53. 最大子序和。
2024-12-16 15:02:38
197
原创 代码随想录算法训练营打卡第43天:Leetcode. 300.最长递增子序列,674. 最长连续递增序列 ,718. 最长重复子数组
本题是动态规划中的子序列问题的入门题目,首先动态规划先定义数组,dp[i]代表在数组中第i个元素(包括i)之前的所有元素中最长递增子序列长度,其次确定递推公式,设置一个变量j,变量范围小于i大于0,如果nums[i]>nums[j],则dp[i]=Math.max(dp[i],dp[j+1]),这道题和上题不同,上题是子序列本题需要连续,首先定义数组dp[i]代表第i个元素的最长子序列长度,由于是连续的,所以如果nums[i]>nums[i-1],则dp[i]=dp[i-1]+1;
2024-12-15 20:55:45
250
1
原创 代码随想录算法训练营打卡第42天:Leetcode 188.买卖股票的最佳时机IV ,309.最佳买卖股票时机含冷冻期 ,714.买卖股票的最佳时机含手续费
针对这道题来说需要具体分析,首先毋庸置疑的就是持有股票的状态,这个状态是不受冷冻期影响的,不持有股票的状态就需要细分了,分为冷冻期前和冷冻期后,冷冻期前的就是刚抛出股票的那天,再然后的状态就是冷冻期的状态。这四个状态用0,1,2,3来表示。其实我感觉这道题其实是比上一道题难的,难点就在于很难想到,但是不知道为啥这道题只是个中等难度,上一道题却是困难;Leetcode714.买卖股票的最佳时机含手续费。zaccheo打卡算法训练营第42天。这道题算是上一篇帖子分享的那道题的。
2024-12-14 17:33:30
210
原创 代码随想录算法训练营打卡第41天,Leetcode 121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II , 123.买卖股票的最佳时机III
同理,dp[i][1]的在第i天,抛出股票后手上最大的现金数目,dp[i][1]也是会有两种结果,要么就是前一天就是已经抛出的状态,dp[i][1]=dp[i-1][1],要么是今天才抛出,dp[i][1]=dp[i-1][0]+prices[i]。依旧是使用dp数组来记录手上最大现金数目,没有进行买卖股票操作时,手上的现金就为初始资金0,dp[i][0]=0,第一次持有股票 dp[i][1]=Math.max(dp[i-1][1],-prices[i]);zaccheo打卡算法训练营第41天。
2024-12-14 17:15:04
381
原创 代码随想录算法训练营打卡第39天: 198.打家劫舍,213.打家劫舍II ,337.打家劫舍III
这道题涉及到二叉树和动态规划,本来二叉树我都不怎么熟练。这道题等二刷的时候再补上吧(捂脸哭)。Leetcode.337.打家劫舍III。zaccheo打卡算法训练营第39天。Leetcode213.打家劫舍II。Leetcode198.打家劫舍。
2024-12-12 13:34:27
322
原创 代码随想录算法训练营打卡第38天: 322. 零钱兑换 , 279.完全平方数
考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);本题求钱币最小个数,
2024-12-10 17:58:30
343
原创 代码随想录算法训练营打卡第37天: 518. 零钱兑换 II, 377. 组合总和 Ⅳ
本题是个组合问题,组合问题我最先想到的就算使用回溯算法进行解答,由于是练习完全背包,所以本题使用完全背包,其实动态规划的背包问题走到这了,也发现有了一套固定的公式,像这种求装满背包有几种方法,递推公式一般都是dp[i] += dp[i - nums[j]];这道题和之前的01背包问题不同,这道题是完全背包问题,01背包和完全背包唯一不同就是体现在遍历顺序上,01背包内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。排列强调顺序,(1,5)和(5,1)是两个不同的排列。
2024-12-09 14:18:26
242
原创 代码随想录算法训练营打卡第36天:1049. 最后一块石头的重量 II,494. 目标和 , 474.一和零
所以我们要求的是 x - (sum - x) = target。假设加法的总和为x,那么减法对应的总和就是sum - x。Leetcode1049. 最后一块石头的重量 II。zaccheo打卡算法训练营第36天。Leetcode494. 目标和。Leetcode474.一和零。
2024-12-08 21:59:59
158
原创 代码随想录算法训练营打卡第35天:背包问题
加上物品i此时背包价值的最大值为dp[i-1][j-weight[i]]+value[i],因为此时背包可以装j的重量,而物品i的重量为weight[i],则如果加上物品i,背包剩余的重量j-weight[i],而dp数组又表示代表的是在加入物品i的时候背包重量为j的最大总价值,所以加入物品i时,背包最大价值为dp[i-1][j-weight[i]]+value[i]我就直接写我的理解了,dp[i][j],其中i为物品索引,j为背包重量,dp[i][j]代表的是在加入物品i的时候背包重量为j的最大总价值。
2024-12-08 15:53:00
488
原创 代码随想录算法训练营打卡第32天:509. 斐波那契数 ,70. 爬楼梯 ,746. 使用最小花费爬楼梯
zaccheo打卡代码随想录第32天。Leet509. 斐波那契数。746. 使用最小花费爬楼梯。
2024-12-04 11:07:59
156
2
原创 代码随想录算法训练营第31天:Leetcode56. 合并区间 ,738.单调递增的数字
zaccheo打卡算法训练营第31天。Leetcode56. 合并区间。738.单调递增的数字。
2024-12-03 21:28:22
127
原创 代码随想录算法训练营打卡第30天:leetcode452. 用最少数量的箭引爆气球,435. 无重叠区间 ,763.划分字母区间
Leetcode452. 用最少数量的箭引爆气球。zaccheo打卡算法训练营第30天。435. 无重叠区间。763.划分字母区间。
2024-12-02 22:11:50
153
原创 代码随想录打卡第29天:Leetcode134.加油站,135. 分发糖果,860.柠檬水找零, 406.根据身高重建队列
zaccheo打卡代码随想录第28天。Leetcode134.加油站。406.根据身高重建队列。
2024-12-02 16:49:24
239
原创 代码随想录算法训练营打卡第28天:Leetcode 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次取反后最大化的数组和
这道题思路挺简单的难点在实现的过程,比如怎么把数组按照绝对值的顺序进行排序,需要使用stream流的方式对数组进行自定义排序之后,从大到小排序,先遍历数组,遍历小于0的就取其相反数,同时k的值减一,如果遍历完成之后k的值依然大于0,则找到数组中最小的的元素开始取其相反数,最后返回数组的元素和。Leetcode1005.K次取反后最大化的数组和。Leetcode122.买卖股票的最佳时机II。zaccheo打卡算法训练营第26天。Leetcode45.跳跃游戏II。Leetcode55. 跳跃游戏。
2024-11-28 14:29:31
328
原创 代码随想录算法训练营打卡第27天:Leetcode455.分发饼干,376.摆动序列,53.最大子序和
这道题我记得在23年我最初开始刷算法的时候这个地方就是我的终点了,时隔一年半再次走到这个地方不胜唏嘘。言归正传,这道题的实现结果很简单,最难的是思考的过程,我是用贪心算法处理的该题,首先要对摆动序列的情况进行判断,zaccheo打卡算法训练营第27天。Leetcode455.分发饼干。Leetcode376.摆动序列。Leetcode53.最大子数组。情况一:上下坡中有平坡。情况三:单调坡中有平坡。情况二:数组首尾两端。
2024-11-27 13:53:01
282
原创 代码随想录算法训练营打卡第25天:Leetcode491.非递减子序列,46.全排列 ,47.全排列 II
本题看似和之前的子集差不多,但是有很多点还是有差异的,首先是去重的问题,本题的去重不能再使用used的boolean类型的数组了,使用的是used的int类型的数组,这里我感觉卡哥的方法还是十分的巧妙的。zaccheo打卡算法训练营第25天。Leetcode491.非递减子序列。Leetcode47.全排列||Leetcode46.全排列。
2024-11-26 14:32:20
237
原创 代码随想录算法训练营打卡第24天:Leetcode93.复原IP地址, 78.子集, 90.子集II
这道题与之前的分割字符串属于一样类型的题目,都是回溯法在分割问题中的应用,主要的难点在于字符串组成是否符合ip地址的标准,首先除了首位或者单独的字符,其他的都不能以0开头,其次,每个用"."隔开的字符串的值不能大于255,首先规则确定了其他的就可以直接套用递归的算法进行递归,不符合我们设定的规则的字符串可以直接返回。zaccheo打卡算法训练营第24天。Leetcode93.复原ip地址。Leetcode90.子集||Leetcode78.子集。
2024-11-25 16:36:21
247
原创 代码随想录算法训练营打卡第23天: 39. 组合总和 ,40.组合总和II , 131.分割回文串
本题和上题不同的点是,原数组存在重复的元素,这就导致了结果集合存在重复的情况,因此在算法实现上需要用到去重的操作防止结果出现重复的集合,去重的操作就是设置一个used的数组,存储boolean值,当遍历到一个元素的时候往used数组的对应为位置存储true,当这个元素被使用过,就将used数组的对应位置存入false.这道题目的本质和之前的模板差不多,可以直接套用之前的回溯模板,唯一要注意的就是和昨天的组合总和不一样的是,本题的元素是可以重复的,zaccheo打卡算法训练营第23天。
2024-11-22 09:46:01
226
原创 代码随想录算法训练营打卡第22天:Leetcode77. 组合,216.组合总和III,17.电话号码的字母组合
zaccheo打卡代码随想录算法训练营第22天。Leetcode17.电话号码的字母组合。Leetcode216.组合总和|||Leetcode77.组合。
2024-11-21 11:06:47
237
原创 代码随想录算法训练营打卡第21天:669. 修剪二叉搜索树 ,108.将有序数组转换为二叉搜索树 , 538.把二叉搜索树转换为累加树
Leetcode108.将有序数组转换为二叉搜索树。Leetcode538.把二叉搜索树转换为累加树。zaccheo打卡代码随想录算法训练营第21天。Leetcode699.修剪二叉树。
2024-11-19 17:48:12
197
原创 代码随想录算法训练营打卡第20天:Leetcode 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 , 450.删除二叉搜索树中的节点
这道题与昨天的二叉树的最近公共祖先可以使用相同的方法,但是由于二叉搜索树的特殊性质,可以用跟简单的方法,但是以训练为主,所以还是使用稍复杂一点的方法。主要是使用递归遍历,遍历到元素等于q或者p就直接返回root,Leetcode 235. 二叉搜索树的最近公共祖先。zaccheo打卡代码随想录算法训练营第20天。Leetcode701.二叉搜索树中的插入操作。Leetcode450.删除二叉搜索树中的节点。
2024-11-18 15:59:08
167
原创 代码随想录算法训练营打卡第18天:Leetcode 530.二叉搜索树的最小绝对差 , 501.二叉搜索树中的众数, 236. 二叉树的最近公共祖先
Leetcode530.二叉搜索树的最小绝对差。Leetcode236. 二叉树的最近公共祖先。Leetcode501.二叉搜索树中的众数。zaccheo打卡代码随想录第18天。
2024-11-17 21:00:13
208
原创 代码随想录算法训练营打卡第十七天:Leetcode 654.最大二叉树 ,617.合并二叉树 , 700.二叉搜索树中的搜索, 98.验证二叉搜索树
使用中序遍历对二叉树进行遍历,中序遍历下,输出的二叉搜索树节点的数值是有序序列,所以使用这个性质,中序遍历之后再判断除根节点之外的序列是不是单调递增就可以了。Leetcode700.二叉搜索树中的搜索。所有左子树和右子树自身必须也是二叉搜索树。Leetcode98.验证二叉搜索树。zaccheo打卡代码随想录第十七天。节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。Leetcode654.最大二叉树。Leetcode617.合并二叉树。这道题首先要明白什么是二叉搜索树。
2024-11-16 18:48:14
202
原创 代码随想录算法训练营打卡第16天:Leetcode513.找树左下角的值,112. 路径总和,113. 路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
,言归正传这道题和昨天一样都是使用递归加回溯的组合,然后用集合存取结果,遍历集合之后如果集合元素的值等于目标值,则可以直接返回,如果遍历完没有查到等于目标值的,则直接返回false。之前做的都是使用前序/中序/后序遍历对二叉树进行遍历,现在反过来了,使用遍历过后的数组还原二叉树,首先需要理清楚一下思路首先找到根节点,对于前序或者后序遍历来说,根节点就数组的首位/末尾的元素,接着在中序遍历中锁定根节点的位置,将中序遍历的数组分为两部分,根节点左边的就是左子数组,右边的就是右子数组,以此类推进行递归,
2024-11-15 18:03:49
1554
原创 代码随想录算法训练营第15天:Leetcode110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 , 222.完全二叉树的节点个数
在做这道题之前要先搞清楚什么是平衡二叉树,平衡二叉树的定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。不出所料,这道题还是需要用到递归(感觉进了二叉树这片林子递归就没断过。),首先要设置左叶子节点的条件,如果一个节点node的子节点是左叶子节点那必须满足条件。Leetcode222.完全二叉树的节点个数。Leetcode257. 二叉树的所有路径。zaccheo打卡代码随想录第15天。Leetcode110.平衡二叉树。Leetcode404.左叶子之和。
2024-11-14 14:22:46
362
原创 代码随想录算法训练营打卡第14天Leetcode226.翻转二叉树 ,Leetcode101. 对称二叉树 ,104.二叉树的最大深度,111.二叉树的最小深度
核心思想就是前序遍历加递归,先通过设置递归的终止节点递归遍历到二叉树节点末端,再对末端节点进行翻转,最后实现对整个二叉树的翻转,这道题还有其他的方法可以进行解决,比如迭代法等,但是目前本人连递归这种解题最简单的方法还没有理解透彻,所以迭代的解题方法后期补上吧。当然这道题还有其他的解法,目前先列出这一种(我感觉这种也是最简单的解法)剩下的之后有时间再补上吧。Leetcode104.二叉树的最大深度。Leetcode111.二叉树的最小深度。zaccheo打卡算法训练营第14天。
2024-11-13 18:03:27
229
原创 代码随想录算法训练营打卡第13天:递归遍历,迭代遍历,统一迭代,层序遍历
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据结构即队列来实现,zaccheo打卡代码随想录第13天。
2024-11-12 20:47:44
323
原创 代码随想录算法训练营打卡第十一天,Leetcode150. 逆波兰表达式求值 , 239. 滑动窗口最大值, 347.前 K 个高频元素
这道题需要构建一个单调队列,目前来说本人还未完全理解,等有时间补充题解和答案。Leetcode347.前 K 个高频元素。Leetcode150. 逆波兰表达式求值。Leetcode239. 滑动窗口最大值。zaccheo打卡代码随想录第十天。
2024-11-12 15:05:09
245
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人