- 博客(72)
- 收藏
- 关注
原创 代码随想录二刷Day58
删除操作和之前题目一样就不多说了;对一个字符串的增加操作就相当于给另一个字符串做删除操作,所以不需要考虑增的操作,只需要考虑删除就可以了。然后更改操作的目的是把最后一个数给改了然后就是dp[i-1][j-1] +1这个是变数, dp[i - 1][j], dp[i][j - 1]是两种删除。知道了递推公式挺好写的,和之前那道题差不多。
2023-11-04 09:25:57
218
原创 代码随想录二刷Day 56
如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;即:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
2023-11-02 02:18:00
233
原创 代码随想录二刷 Day55
注意题目中说的子数组,其实就是连续子序列;为了初始化省两个for循环,定义dp[i][j] 是以di[i-1][j-1] 为结尾的数组最长的重复子数组;这道题是二维dp数组。把前面那个题的dp表理解清楚为什么每个数字是这么产生的,这样这道题就很简单了,都不需要两个变量遍历,一直和前面那个数字比就可以了。这道题虽然是i和j但是构造的是一维dp数组,只不过这个一维数组在i的值递增的过程中一直在更新,有点像滚动数组。
2023-11-01 11:47:34
162
原创 代码随想录二刷Day 51
和之前那个题一样也是判断拿和不拿两种状态,递推公式自己写错了;这里有点搞笑我刚好写成了这一天另一个题目的122的递推公式就是把-price[i] 加上了之前的盈利总和。121这么写不能通过;122那道题之前在贪心做过了。121 买卖股票的最佳时机。
2023-10-27 12:33:16
233
原创 代码随想录二刷 Day50
情况二就是假设不存在最后一个元素来求最大可以偷的, 情况上就是假设不存在第一个元素来求最大可以偷的,具体情况二选不选择首元素这个要看递推公式来决定;树形dp,后序遍历。dp的含义是dp[0]是不屈这个current的最大值,dp[1]是取这哦current的最大值。这个题一开始由于给出来的例子陷入了思维误区,以为结果就是每隔一个取一个,其实有可能中间隔很多个。下面这种动态规划才能做出来;
2023-10-26 03:54:16
335
原创 代码随想录二刷 Day48
题还是比较简单,递推公式和之前不一样,因为之前的题目求的是达成的总共一共多少方法,如果达不成就会返回0,但是这个题问的是返回的最小数量,就要自己判断达不成的时候怎么办。这个题达不成的时候就是有格子没动的时候,这时候就返回-1;另外这个题是求最小数量,所以排列或者组合就无所谓了。逻辑挺简单的,有些细节还是没写对。
2023-10-25 01:13:23
344
原创 代码随想录二刷 Day46
10背包: 二维内侧与外侧都是正序遍历,二维的内侧与外侧是背包还是物品无所谓;10背包: 一维外侧是正序,内侧是倒序;目的是为了一个物品只选取一次;一维内侧一定要是背包;原因我想了下还是因为这个内侧是倒序的原因导致的。因为本来每个dp【j】的状态都取决于他之前dp[j-n]的状态, 然后你还是从最后面开始往前算的,那必须先把row的数据算出来,不然下面一行的数据用不了前面的数据了;
2023-10-24 08:58:39
443
原创 代码随想录二刷 Day 45
这道题还是要想出来把整个石头堆分成尽量相等的两堆,这样消消乐之后得到的数值最新,每次取两个,分成两堆之后消不掉就继续取,直到消掉为止。除此之外都很简单自己可以写出来,和之前那道题一模一样public:i++){//这个就是背包容量j,重量为元素的数值,价值也为元素的数值这么写溢出或者越界i++) {j--) { //这里跳出的条件是总和一半要比取得这个数字大494. 目标和分成加法的集合与减法的集合这两堆;假设加法的总和为x,那么减法对应的总和就是sum - x。
2023-10-23 09:36:26
373
原创 代码随想录二刷 Day 44
01背包问题二维做法先遍历背包或者物品都可以,然后是前序遍历;一维做法一定先遍历物品然后遍历背包,遍历背包的时候是后序遍历;一维做法还是有点难理解,其实就是后面的数字还是要从前面的推导出来,但是如果正序的话前面的数据已经被覆盖了用不了了,所以就倒序;另一方面由于初始化得当,倒序也可以把第一层算出来,然后第二次倒序的时候在还没改变前面数值的时候调用上一层的结果,这个上层结果其实也是这层前面得数;
2023-10-21 08:05:50
510
原创 代码随想录二刷 Day 43
有个问题:第一个进行状态方程的时候result[i] 还没有数值,这时候max会怎么进行比较?如果在定义dp数组的时候初始化为全部为零 vector<int> result((n + 1),0);这样我就能理解因为一开始result[i]是有数值的。这个道题是个数学问题,代码很简单但是状态转移方程不好写。又是道数学推到题目,代码简单但是状态公式很难。
2023-10-19 09:40:48
426
原创 代码随想录二刷 Day42
题目会传入一个obstacle table里面有记录0和1代表有没有障碍,另外我们自己创建一个dp table并且初始化为0,然后再遍历的时候判断这个obstacletable里面的数字是不是1, 如果是的话就让他为零;简单题目自己就可以写出来,注意下创建二维vector的方法就可以, dp table如下。
2023-10-18 12:30:16
489
原创 代码随想录二刷 Day 37
由于people是二维数组, people[i][1],取出来的k也就是第二个元素按照第二个元素进行插入;下面是这个二维数组的样子 people[i][1]就是第二列;people[i] 就是一整个row, 把这一整个row insert进去。这个题写不出, 主要思路先把身高右高往矮排序,然后在按照第二个参数排序;因为后面的人个子比较矮, 就算插到前面取的话也不会影响前面的数据,所以可以一直这么插入。5这个情况不需要判断只需要记账,10和20就要判断下,只有20的部分需要贪心。
2023-10-17 10:39:19
615
原创 代码随想录二刷 Day41
简单题,和前面两个题差不多,要注意一点: 如果cost里面有十个元素,最后要去的是11层,因为到了第十个元素还要往上一层才是楼顶,这部分注意下就很容易了。简单题目,dp table如下,因为题目说了每次只能走一到两格,所以后一个的结果可以由-1和-2的结果推导出来,剩下的就和上面一摸一样;这个题简单入门,注意下N小于等于1的情况就可以。
2023-10-17 06:25:12
674
原创 代码随想录二刷 Day36
首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。这个题的sort部分写法不会进行绝对值排序;
2023-10-16 12:15:21
441
原创 代码随想录二刷 Day 35
这道题只需要理解一句话,就是确保coverage覆盖的 范围能到达末尾就可以,自己写的差不多但是有些细节写错了所以代码过不了。数组两两求差,然后把正数加起来。
2023-10-16 10:20:04
514
原创 代码随想录二刷 Day 34
这个题差不多是两个for循环遍历,然后用双指针法化简,自己可以大概写出来,漏了一个边界条件。这个思路主要就是找peak的数量,需要注意几种不同的情况以及边界条件。写不出, 主要的过程就是当结果小于0的时候从这个数字开始累加。
2023-10-15 08:30:24
476
原创 代码随想录二刷Day 31
这个题就不用startindex每次从那个数之后选择了,每次都是从最开始选择, 但是每次for循环选过的数字还是要删掉,所以加了下面这句删除。这个题也是前面那个题和树层去重的缝合问题;used数组又要和上面那个题一样用来去掉本层已经选过的元素,又要用来排除重复的组合。
2023-10-08 10:59:23
729
原创 代码随想录二刷 Day 30
与组合问题不同的就是要收集所有的子节点,而不仅仅的叶子节点;唯一一行代码的区别就是要把result的收集过程放到递归程序的最开始那里。这个题和上一个题区别就是要加上树层的去重,整体还是挺好做的,有些细节还是不会写。
2023-10-08 03:00:19
976
原创 代码随想录二刷 Day 29
第一大层递归的时候index是0,然后进入递归第二层小递归for循环第一次只切割一个数字出来;然后第二层小递归for第二次就会切出俩数,但是这个不符合就直接去掉了。这个题与昨天第一题的区别就只有下面这一句(从i+1改成了i),下面这一句就确保了一个数字可以重复使用,但是又不会出现重复的结果,这个要根据树形图理解下。这个题也是要排序后再做;第二大层递归的时候index是1,所以第一次切割会直接切割出俩数,然后第二层小递归也是一个一个切割;第三大层递归index是2,所以第一次切割会切割出仨数。
2023-10-07 10:48:27
802
1
原创 代码随想录刷题 Day28
和前一个题一样,照着自己就能写出来,就多了一个判断结果是不是等于n的逻辑。有两个地方可以剪纸,一个是当和已经大于要找的时候直接返回,另一个是当剩余元素少于三个的时候直接返回(第一层递归是少于三个, 第二层递归是少于两个)注意下string的用法。比如定义string s可以对s做 s[]操作。
2023-10-04 06:04:05
1146
原创 代码随想录二刷 Day23
这个题尝试把 root->left = traversal(nums, left, mid - 1);里面的left改成0但是不行,因为left和right的数值在迭代的过程中会被mid动态替换;找到小数字的右子树与大数字左子树必须要重新检查一遍然后让root的左右直接指向return的左右节点;, 中节点的处理逻辑就是让cur的数值加上前一个节点的数值,就是反中序来做累加;538.把二叉搜索树转换为累加树。
2023-10-02 12:17:10
1034
原创 代码随想录二刷 Day 20
这个分割左闭右开一开始不理解,没用过vector的构造函数617.合并二叉树如果是下面这种情况的好,那么等一个树遍历到5的时候另一个树就遍历到的null, 这时候return root1 的时候5以下的节点也会跟着一起过去,然后就直接往上一层返回了, 注意这里返回的是TreeNode*.
2023-09-27 11:19:10
1060
原创 代码随想录刷题 Day18
这个题用层序遍历比较简单,按照模版改一句话就可以;层序遍历用这个queue来实现;用前序遍历的话就需要用递归比较麻烦。
2023-09-26 10:34:25
1080
原创 代码随想录二刷 Day17
下面那句如果不写的话,那么下面那个例子回返回左子树高度-1,右子树高度也是-1. 然后高度差算出来小于1,最后就会返回结果说这是个平衡二叉树;主要是因为当得到第一个-1的时候递归还没有结束,不人为结束的话这个结果会被后面的递归改变。递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。
2023-09-26 05:36:33
1038
原创 代码随想录二刷Day 15
访问二维vector的元素: 如果指定外层和内层向量的大小,就可用operator[]进行读和写;如果只指定外层向量大小,就能用push_back()函数进行写,不能用operator[]进行读和写下面这行不理解主要是因为不了解vector怎么使用,vector是可以自动变长度的数组当存心的元素进来的时候,但是没存进来的时候空的vector还是空的vector不能直接[]取后面的数,这时候就会越界,二维vector的水平方向可以一直加元素,竖直方向也可以一直加元素,但是加元素之前不能用operator取。
2023-09-22 12:02:40
1105
原创 代码随想录刷题 Day14
/v里面是1 , 2 , 3。144.二叉树的前序遍历(opens new window)v.push_back(2);//v里面是1 , 2。要注意下创建函数参数传递不是很理解。
2023-09-21 10:18:03
1184
原创 代码随想录二刷 Day13
deque的特点是可以在队列的两端进行元素的操作,并且可以高效地在队列的任意位置进行元素的插入和删除操作。此函数返回值为队列的尾部元素,常与8.pop_back()函数一起,先通过back()获得队列头部元素,然后用pop_back()将其从队列中删除;347题不用大顶堆是因为我们希望在堆里面存放K个我们需要的元素,堆每次进来元素的时候都需要从父节点pop一个元素而且还是最大的元素,等遍历结束后剩下的元素反而是小的的元素。这个操作跟普通队列(queue)的push()方法类似,在队列的尾部添加一个元素;
2023-09-20 13:44:10
1298
原创 代码随想录二刷 Day 11
这个题下面这一句一定要放在s[i]!= result.top() 前面,因为这个输入case有个直接输入‘’]‘’ 这种情况,不把下面那句放在前面的话就会对一个空stack进行top()操作,不能对空stack操作;在视频的15分钟有讲解。
2023-09-17 10:58:56
1266
原创 代码随想录二刷 Day 10
题目还是不难,就是stack和queue的各种函数和操作需要记一下。思路就是用两个stack,一个座位出,另一个作为入;
2023-09-15 11:38:35
1257
原创 代码随想录刷题 Day7
注意这个题和之前题目的区别之处在于这是在同一个数组中选取元素,而且如果有好几个a都等于同一个数,或者好几个b等于同一个数,那么结果就会重复,题目说课不能重复,所以需要剪纸操作;有时间的时候写一写;变成了两层for循环,一层i=0;第二层k= i+ 1;left = k+1;数据量不大可以直接用数组,其他方法基本和之前那个242题目一样, 还是挺简单的。答案里面的c++11那种写法还是不太适应。
2023-09-13 12:56:45
1598
原创 代码随想录刷题 Day4
遍历link list两次的方法很容易写出来;快慢指针需要注意空指针的细节处理。19.删除链表的倒数第N个节点。24. 两两交换链表中的节点。
2023-09-11 11:43:17
1552
原创 代码随想录刷题 day 3
个人要熟悉下while(index--) 这种写法,另外还有一些size的边界条件的考虑。下面的程序还没调通有些细节要改改。知道双指针逻辑动图的话实现起来挺简单的。简单,熟悉下用头结点;
2023-09-10 13:56:44
1682
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人