![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
卡尔算法营
文章平均质量分 53
Fremount
这个作者很懒,什么都没留下…
展开
-
代码随想录 day42
【代码】代码随想录 day42。原创 2022-12-12 09:07:08 · 231 阅读 · 0 评论 -
代码随想录 day41
题目链接: 整数拆分解题思路: 确定dp[i]为对i进行拆分,得到最大乘积为dp[i],状态转移方程为dp[i] = Math.max(j * (i-j),j * dp[i-j],dp[i]);解题代码:题二: 不同的二叉搜索树题目链接: 不同的二叉搜索树解题思路: dp[i]为输入i时 dp[i]种不同的二叉树。状态转移方程dp[i] += dp[j-1] * dp[i-j]解题代码:原创 2022-12-08 10:50:25 · 427 阅读 · 0 评论 -
代码随想录 day39
题目链接: 不同路径解题思路: dp[i][j]代表在位置(i,j)时候的路径总数,dp[i][j] = dp[i-1][j] + dp[i][j-1]; dp[0][i] = 1; dp[i][0] = 1; 从左到右,由上至下进行遍历。解题代码:题二:不同路径 II题目链接: 不同路径II解题思路: 障碍处肯定是不能走的,在边界上遇到障碍时,那一行或者是那一列障碍物后边位置都为0,都不可以走。dp[i][j]所代表的含义不变,初始化行列的时候要注意判断障碍物。递推公式不变,当遍历非上左边界的时原创 2022-12-07 14:06:38 · 244 阅读 · 0 评论 -
代码随想录 day38
题目链接: 斐波那契数 解题思路: 首先确定dp[i]代表的是什么,这里可以确定的事dp[i]代表的是第i个斐波那契数,然后确定递推公式,题目已经给出dp[i] = dp[i-1] + dp[i-2],再初始化dp数组,dp[0]=1,dp[1]=1;确定递推方向,从小往大递推。解题代码:题二:爬楼梯题目链接: 爬楼梯解题思路: dp[i]代表到达第i阶有dp[i]种方法,确定递推公式,可以一个一个地推一下,不难发现规律,dp[i] = dp[i-1] + dp[i-2]; 初始化dp数组,dp[原创 2022-12-07 12:01:18 · 95 阅读 · 0 评论 -
代码随想录 day37
题目链接: 单调递增的数字解题思路: 暴力解题代码:题二: 买卖股票的最佳时机含手续费题目链接: 买卖股票的最佳时机含手续费解题思路: 等待二刷 ,没弄明白解题代码:题三:监控二叉树题目链接: 监控二叉树解题思路: 蒙圈状态解题代码:原创 2022-12-03 10:14:17 · 159 阅读 · 0 评论 -
代码随想录 day36
题目链接: 无重叠区间解题思路: 暴力解题代码:题二: 划分字母区间题目链接: 划分字母区间解题思路: 暴力解题代码:题三:合并区间题目链接: 合并区间解题思路: 暴力解题代码:原创 2022-12-03 10:08:07 · 82 阅读 · 0 评论 -
代码随想录 day35
题目链接: 柠檬水找零解题思路: 暴力解题代码:题二:根据身高重建队列题目链接: 根据身高重建队列解题思路: 暴力解题代码:题三:用最少数量的箭引爆气球题目链接: 用最少数量的箭引爆气球解题思路: 暴力解题代码:原创 2022-12-03 09:39:09 · 65 阅读 · 0 评论 -
代码随想录 day34
题目链接: K 次取反后最大化的数组和解题思路: 先排序,然后每次选择最小的元素解题代码:题二:加油站题目链接:加油站解题思路: 有点难 等二刷解题代码:题三:分发糖果题目链接: 分发糖果解题思路: 有点难 等二刷解题代码:原创 2022-12-03 09:34:28 · 134 阅读 · 0 评论 -
代码随想录 day32
题目链接: 买卖股票的最佳时机 II解题思路: 低买高卖解题代码:题二:跳跃游戏题目链接: 跳跃游戏解题思路:解题代码:题三:跳跃游戏 II题目链接: 跳跃游戏 II解题思路:解题代码:原创 2022-12-03 09:26:21 · 495 阅读 · 0 评论 -
代码随想录 day31
题目链接: 分发饼干解题思路: 以最小的饼干大小满足单个孩子的胃口,以单个最优满足全局最优。解题代码:题二:摆动序列解题链接: 摆动序列解题思路:解题代码:题三:最大子序和题目链接: 最大子序和解题思路:解题代码:原创 2022-12-03 08:49:17 · 112 阅读 · 0 评论 -
代码随想录 day29
这道题很难受的一个地方就是不能排序,不然跟求子集差不多,题目要求是递增的,且要大于俩个的才算是递增子序列。一开始我还是以老思路,设置一个全局的used来去重过滤,但是这里给出的数组就根本不是有序的,不能使用这种方法。通过在每一遍递归中设置一个used数组来记录每一层的遍历情况来达到一个过滤的效果。我做这道题的一开始的难点是怎么在选了一个元素之后让这个元素在于其他元素进行逐个搭配呢,这里又要用到一个全局的used数组了,且不使用startIndex,used的数组用来标记遍历过的元素。原创 2022-11-25 12:02:36 · 93 阅读 · 0 评论 -
代码随想录 day28
这边儿就需要用到一个used数组了,需要特别注意的一点是在单次递归遍历的逻辑里边,如果这个数字和前面那个数相等,我们到底应不应该继续往下操作,结合卡尔哥的点拨,我知道当前面那个数没有被用过的时候就不可以往下遍历,应为那恰好是被用过回溯过来的,如果接着使用则一定会出现重复的数字,如果遍历过了的话则这次遍历肯定是在树枝上,可以往下继续进行。一开始我以为要用一个used,但是里边没有重复的数字,所以就没必要用了,抽象成一棵树之后就是简单的递归回溯。然后还有一点需要注意的是我们在遍历的过程中是边遍历遍收集结果的。原创 2022-11-23 07:19:17 · 67 阅读 · 0 评论 -
代码随想录 day27
注意这里candidates 中的每个数字在每个组合中只能使用一次。所以再遍历的过程中我们需要进行去重操作,这里去重有两个概念,一个是树枝去重,一个是树层去重,在树枝去重上需要使用一个used[]做一个标记数组,说到这,我们首先应该对给出的数组进行一个排序操作,然后再进行横向遍历的for循环时首先应该判断前一个与当前元素是否相等,相等了还要判断前面那个元素是否被使用过,如果没有被使用过直接continue,否则就放入path,进入递归操作,为什么要这么处理呢?原创 2022-11-21 18:06:06 · 371 阅读 · 0 评论 -
代码随想录 day25
把解题过程抽象成一颗构造好的树,采用深度优先遍历的思想(方便我们回溯),具体的解题树见代码随想录视频,在最后一步终止递归的时候,需要通过路径判断sum和给定值是否相等。还是组合的问题,首先我们得设定一个数字字符对照表lettermap,每一次递归都要跳到下一个数字,每一次回溯都得倒退到前一个字母。原创 2022-11-21 12:04:29 · 88 阅读 · 0 评论 -
代码随想录 day24
回溯法和递归都是相辅相成的,回溯法一般隐藏在递归的下面。原创 2022-11-20 14:24:02 · 97 阅读 · 0 评论 -
代码随想录 day23
再递归得角度上来说,就是先判断当前结点得值在不在区间得左边还是右边还是中间,在左边得话再递归遍历右子树,在右边得话递归遍历左子树,在中间的话往左右子树两边双管齐下。跟卡哥说的一样,我用一个数组会做,但是用二叉树就不会了,后边仔细想了想,实际上就是一个反转的中序遍历,加上之前说的双指针的思路,这道题就是送分题。跟构造二叉树差不多,主要就是要确定好中间结点和左右区间。原创 2022-11-17 17:56:28 · 150 阅读 · 0 评论 -
代码随想录 day22
通过这道题我知道我对二叉树的节点操作还不是很熟悉,这道题有点复杂,但是想清楚了也就那么一回事,要分五种情况:1、没找到删的点 2、要删除的点是叶子节点 3、左节点不空右节点为空 4、左节点为空右节点不为空 5、左节点不为空右节点不为空,其中当属第五种复杂一些。自己画画图整理下思路,一下子就想通了。跟二叉数的最近公共祖先的解题思路差不多,但这里有一点是,确定一个节点在给出节点q、p的中间的时候,这个节点一定是最近公共祖先。:找到正确位置插入即可,以下代码超过100%的人,原创 2022-11-17 15:31:47 · 784 阅读 · 0 评论 -
代码随想录 day21
第二种方法就是利用双指针的方法,卡尔的代码写的很精妙,设置一个count代表当前遍历结点的重复次数,设置一个maxcount代码当前数所遍历到的节点的最大重复次数,如果pre指针所指节点等于cur count++,否则count归一,然后就是当count===maxcount的时候应该把当前数放入到result结果集当中,当count > maxcount的时候,maxcount要置为count,result结果集清空,并把cur放入。原创 2022-11-17 12:51:48 · 637 阅读 · 0 评论 -
代码随想录 day20
后面看了卡哥的视频之后,有了新的思路,二叉搜索树的中序遍历是递增的,如果不是递增的那肯定不是二叉搜索树,所以我们先中序遍历得到一个遍历数组,然后再加以进行判断,还有一种方法就是在遍历树的过程中就把这个顺序就给判断了,这就要使用双指针的思想了,设置一个pre,初始化为最小的值,在遍历的过程中如果碰到了其比当前遍历的元素的值要大的话则直接返回false,否则返回true。使用递归的思路,从给出的数组里边选出一个最大的值作为根节点,然后再对数组进行分割,递归下去,知道分割完了返回null。原创 2022-11-14 20:29:51 · 200 阅读 · 0 评论 -
代码随想录 day18
从根节点遍历到叶子节点就是一条路径,如果这条路径上的值之和等于给丁的targetsum,则返回true,这里涉及到了回溯。先由后序我们可以得到根节点,再由中序遍历我们可以得到左右子树,关键点在于切割数组。可以使用层序遍历,找到最底下那层的最左侧的值,送分题属于是。原创 2022-11-13 10:37:54 · 176 阅读 · 0 评论 -
代码随想录 day17
我们在这里使用前序遍历,只有前序遍历,父节点指向孩子节点,才能把路径保存起来,这里还涉及到了回溯的过程。先把左子树的左叶子节点的值收集到,再把右子树的左叶子节点的值收集到,然后相加再返回,这就是整体思路。平衡二叉树就是在二叉树里的任何一个节点的左右子树的高度差不能超过1。原创 2022-11-12 22:56:57 · 155 阅读 · 0 评论 -
代码随想录 day16
并记录左右的高度,如果左右高度相等,则说明是一颗满二叉树,这样就可以使用公式了,如果不相等的话就只能计算左子树节点数量+右子树节点数量+1的值了。这题看上去就是把求最大深度的max方法换成min就行,但其实不是这样子,这里就不能用上题的思路了,因为最小深度是根节点到叶子节点的最小深度,如果没有叶子节点是要返回0的,但是上题返回的是1,遇到左节点为空的返回右节点的高度+1,遇到右节点为空的则要返回左节点的高度+1。首先要搞清楚深度与高度的概念,深度就是根节点到叶子节点的距离,高度就是叶子节点到根节点的距离。原创 2022-11-12 17:10:47 · 230 阅读 · 0 评论 -
代码随想录 day15
可以这么想吧,翻转的时候我们可以从上层的左右节点开始翻转,也可以从下边的左右节点开始翻转,但是先翻转左子树的,然后再翻转上层的左右子树的就会造成一些混乱,左子树翻转好后回到上一层翻转,再转到右子树,可刚刚处理的就是这棵树,可以画图试一试。因为只有后序遍历我们才能把是否相等的信息返回给上一层,如果是使用前序,后边的还没处理呢,怎么知道结果呢,如果是中序,就很乱了,其实说到这,也不是说使用前序或是中序不行,就是用这俩个写代码的话有点多,要处理很多逻辑。这里需要指定一个size变量,来记录每一层元素的数量。原创 2022-11-12 12:26:15 · 221 阅读 · 0 评论 -
代码随想录 day14
二叉树的遍历主要分为两种,分别是深度优先搜索和广度优先搜索,深度优先搜索仔细分还可以分为三种,即前序、中序、后序遍历,广度优先搜索即层序遍历,使用递归的方法实现前中后三种遍历的代码如下。答案是不可以的,因为中序遍历的在迭代法上的逻辑跟前序后序有些不一样,去举个简单的例子试试就知道了。统一迭代也就是层序遍历,这里我们需要用到队列,遍历一层出队一层,遍历一个出队一个。二叉搜索树:头节点>左节点>右节点的树,中序遍历下来是一串递增的数值。完全二叉树:除叶子节点外全排满的树,且叶子节点要是连续的。原创 2022-11-09 23:25:44 · 302 阅读 · 0 评论 -
代码随想录 day12
在进一步看,本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么这岂不就是一个相邻字符串消除的过程一样的了。这题的意思是看给出的这一串括号是否能两两不错位匹配,设计到匹配与位置问题,首先要先想到的应该就是栈,遍历这个字符串,遇到左括号就放相应的右括号,遇到右括号,就看栈顶有没有想等的右括号,如果有,就出栈消掉,跟消消乐一样,如果没有则必不可能闭合。这个也跟消消乐一样一样的,遍历这个字符串,然后一个一个元素地放入一个栈,如果碰到栈顶元素与当前元素相同的就抵消掉,最后返回这个栈即可。原创 2022-11-06 16:43:53 · 870 阅读 · 0 评论 -
代码随想录 day10
出栈的时候需要判断出栈列表是否为空,如果为空,则需要从入栈列表中引入,如果不为空直接出就行,我在这里就犯了一个错误,不管为不为空都把入栈表清理一遍,后面执行的时候发现报错,仔细想了一下发现不能这样写,因为这样肯定会出现顺序混乱的现象,举个例子,先进入队1、2、3、4.然后再执行一个出队操作,照之前我那错误的写法应依次加入4、3、2、1到出栈当中,然后弹出1,我们再入一个5,再执行出队操作,此时如果按我这种逻辑的话,5就在出栈栈顶也就是队头了,这样肯定不行。一句话,栈先进后出,队列先进先出。原创 2022-11-05 21:02:43 · 81 阅读 · 0 评论 -
代码随想录-第八天
字符串相关算法题原创 2022-11-04 01:12:36 · 75 阅读 · 0 评论 -
代码随想录-第七天
代码随想录 day7原创 2022-11-02 00:59:39 · 234 阅读 · 0 评论 -
代码随想录 第六天
代码随想录训练营第六天原创 2022-10-31 23:58:58 · 92 阅读 · 0 评论 -
代码随想录-第三天
代码随想录day3原创 2022-10-30 23:27:45 · 65 阅读 · 0 评论 -
代码随想录-第二天
代码随想录第二天原创 2022-10-30 22:48:44 · 152 阅读 · 0 评论 -
代码随想录第一天 二分查找与移除元素
二分查找与移除元素原创 2022-10-26 23:11:10 · 146 阅读 · 0 评论