自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录第32天|

今天又玩了一天,,摸了一天鱼。

2023-08-10 17:25:18 114

原创 代码随想录第41天|01,01,416

我还没有自己敲一遍,但是这个意思我懂了,==dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);所谓滚动就是把上一层的状态复制到下一层,然后进行计算并覆盖,把一个二维的数组变成了一维。就是直接从物品0所消耗的wight开始初始化,其他都是0;dpj:容量为j的背包所包含的最大价值。仔细思考一下那个过程。

2023-08-07 19:00:04 108

原创 代码随想录第40天|343,96

4拆了,dp2 × dp4(1×1×dp4),那么在1×5里面就已经有过这种情况了(1×1×4)。每次都会和前面的情况重合了。因为是搜索二叉树,所以要不断的变换节点,然后左边的情况×右边的情况,同时注意要不断的相加起来哈。另外这个循环也写的很有意思,括号里面还要有dpi,因为每次要更新!这道题挺难的,想了一会为什么i-j拆但是j不拆!关键是里面的递推逻辑。

2023-07-26 20:09:03 111

原创 代码随想录第39天|62,63

想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。另外遇到障碍物直接continue就行,我想的是后来那个数选择加那一边不受影响的,那还要判断障碍物在i-1还是在j-1这条路上,复杂多了哈!如何初始化呢,首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。我想复杂了,我在想两个矩阵怎么联系起来,要么就是只用一个矩阵表示但是初始化的1和障碍物的1怎么区分!注意循环是从初始化那一边开始!

2023-07-21 21:57:35 134

原创 代码随想录第38天|509,70,746

懂啦,就是上楼梯要么是一节一节迈,要么是两节一起上,所以dp[i-1],dp[i-2]就是迈一步迈两步。注意i从3开始,另外如果n=1的时候return n.所以还是依赖i-1,i-2这个状态.对动态规划的题目稍微有一点认识了。

2023-07-19 21:52:56 57

原创 代码随想录第37天|738,968

把n的每一位都分出来,然后看从那一位开始减小,然后就把前一位减1然后后面的位都是9,再用乘法给计算出来。这里要i–倒着遍历是因为比如说332,正着遍历是329,倒着就是299正确答案啦。这道题算是基本写出来了,就是有些库函数不会用!

2023-07-13 21:42:53 68

原创 代码随想录第36天|435,763,56

这一步的意思就是取一个最小值,能够保证a之前的区间都小于a为8。right是一直在取一个最大值!一开始不知道有.back()函数!想到了利用左边进行排序,然后就没想法了!看了解析觉得好像也没有那么难!这道题又是好巧妙的一道题目呀!

2023-07-13 20:32:16 29

原创 代码随想录第35天|135,860,406,452

最小的身高的第二个值就是它所在的新位置,这样依次排下来,如果位置有相同的,就往后挪一位,同时比较身高值(如果位置不同),身高值大的就留下,另外一个位置相同比较数值大小,小的留下,打的往后挪。卡哥的思路也太巧妙了!,分别从左右考虑然后一个从前往后遍历,一个从后往前遍历!我的思路是,先把身高从低到高排序,身高相同的也是从小到大排第二个值。很明显这道题不能上来就用排序,因为是左右两边都要进行比较!但就是应该从大到小排序!这个地方还是值得想一想的!

2023-07-06 22:00:22 33

原创 代码随想录第34天|1005,134,135

这到题目的第二个例子就算是提示了,一直到gas[i] > cost[i]才有可能有解。我的思路是先将数组从小到大进行排序,然后变化正反,再排序,始终变化第一个数。还是逻辑上的问题,想明白了就好了。代码随想录上的方法是。

2023-07-05 20:29:45 38

原创 代码随想录第32天|122,55,45

这道题的思想就是先算一个覆盖范围,在这个覆盖范围里的值都可以取到,一旦出了这个范围就要加一步,另外更新在这个范围里的新的范围,每次比较之后取最大值,出了第一个范围,接下来就是看这个第二个最大范围了,这是第一步能跳的一个范围值(这里面的数都能取到)。注意这个地方是取得最大值,而不是每次更新nextCover = max(nums[i] + i, nextCover);这道题确实比上一道难!

2023-07-02 19:53:19 120

原创 代码随想录第31天|455,376,53

注意这道题的三种情况,res初始为1只有两个数时,这其实跟每次峰谷更新的是什么值有关系,(每次更新的是最后一个值,三个数符合的时候更新的是第三个数!注意这道题目只需要一个数字就行,一开始我还想的是vector包含一下,其实没必要了,直接计算两者之间的数值比较就行,不用存储。想清楚局部最优解的问题是怎样的,感觉有点逻辑在里面。外层循环什么要想清楚!for循环里的条件也要写好!看起来还挺复杂的感觉。

2023-06-20 21:18:20 35

原创 代码随想录第29天|491,46,47

这道题目我想的是先将数组进行一遍排列,这样相同数字的就在一块了,然后判断nums[i]!=nums[i+1],以及继续用used数组进行排列。另外for循环在树层上的时候不要忘记了,经常就忘了还要for循环遗漏了132这种情况!还是自己在纸上画了一遍整个流程才明白!注意used就是防止每一层重复选取,很妙啊!第一次写的时候把第一个i-1写成了i是不对的!112这样的组合就都没有了。这道题目还需要注意,if后面不用加return。,排完序的数组都是自增子序列了。

2023-06-06 21:17:06 25

原创 代码随想录第29天|93,78,90

2.判断是否合法的时候,情况要考虑全,另外循环不能从0到size-1截止。1.注意审题,这道题目不需要另外有一个数组p。3.backtracking里面是。

2023-06-04 21:40:04 53

原创 代码随想录第27天|39,40,131

于是乎就改成先从小到大排序,如果和前面相等就continue,只要不相等,就说明和前面元素不重合,但这样也有个问题就是:continue加在哪里,很有可能就是他重复元素并不会在组合中出现了,因为和前面的元素相等!首先是[2,2,2,2],接下来再试探[2,2,2,4(6)],一级一级往回退,再试[2,2,4(6)];此题我还在想会不会重复,不会!就是到[5,3]了就只在5,3里面进行选择,2不会在被选择了!我想的是这道题可以重复,那那个数组怎么办,人家直接在回溯的时候不用i+1就可以了!

2023-05-31 21:29:17 24

原创 代码随想录第25天|216,17

一开始忘记了写这两句,第一句相当于是把给的“23”里面的2和3单独提出来,然后第二句和map产生联系,取出2和3所对应的字符串!有了上一题目77的基础,这道题还是不会做,慢慢积累吧!其实好像也没想象的那么难~确实很容易一开始想到for循环!

2023-05-30 19:00:15 195

原创 代码随想录第24天|回溯算法,77

递归来做层叠嵌套(可以理解是开k层for循环),每一次的递归中嵌套一个for循环,那么递归就可以用于解决多层嵌套循环的问题了。要解决 n为100,k为50的情况,暴力写法需要嵌套50层for循环,那么回溯法就用递归来解决嵌套层数的问题。在纸上画一下递归的过程就明白了,但是实在是太厉害了!

2023-05-24 21:17:53 26

原创 代码随想录第23天|669,108,538

这道题哈我还是理解为前序遍历,然后在if语句里面也要进行递归,其实是因为即使有一个节点不符合条件,就要进行剔除,所以要进行递归!(强行理解递归过程!这道题目哈我的思路是构造两个数组出来,一个前序数组和一个中序数组,这个左右子树的数目平均一下,然后再进行二叉树的构造。左中右的遍历就可以了,然后直接对值进行修改,不用再创造一颗二叉树进行改变!题目还看了一会才明白啥意思!用了代码随想录的思路!

2023-05-22 20:40:23 28

原创 代码随想录22天|235,701,450

这道题目哈我的思路是遍历,然后找到相应的区间,此时创造一个新的节点tmp等于原来要改动的部分节点,然后root新的指向(要加入的节点),再把新的指向指向tmp;分情况讨论,有一种情况没有想像的简单哈:左右子树都不为空,且两边还各有子树!代码随想录的解法是,不改变二叉树结构,直接遇到NULL就插值哈!用迭代法不香吗,充分利用了二叉搜索树的性质!

2023-05-22 19:33:24 23

原创 代码随想录第21天|530,501,236

这道题我的思路就是另外设置一个map,键值对就是出现的次数和所对应的值。,但是键和值弄反了);对于这道题,可以更好的思考以下递归的逻辑,以及return的作用范围!另外一种思路就是中序遍历得一个数组,挨个比较差值。用的第二种方法,这道题分类要想清楚,有些细节重置挺有意思的!另外也有想到这道题是二叉搜索树有特定的解法!最后不要忘了就是pre=cur这个更新哈;注意判断结束的逻辑和中的逻辑不相同!这一段代码同时包含了以上两种情况!这道题目用到了后序遍历的方法!

2023-05-21 11:06:08 26

原创 代码随想录第四天|24、19,0207

这是假如是偶数的情况比如我现在是空链表,又或者是只有1->2->3->4,现在我的cur指向4了下一个就是nullptr了,cur->next->next,适用于奇数的情况比如1->2->3->4->5。之前我想当然的认为cur->next->next = nullptr必然不会出现cur->next= nullptr的情况,因为当时我是固定了链表长度来进行的思考,倒推的,这是不对的!这句话可以理解为,所谓链表相交,就是要让相交以后的链表完全一样,比如说链表相交后的长度,链表相交后所有节点的值也一样;

2023-05-19 15:58:17 30

原创 代码随想录第20天|654,617,700,98

这道题目是根结点右边的值比根结点的大,左边比根结点的小。这里如果一直用root代替res是不对的!注释掉的是我原来写的,但是很遗憾是错的!跟中序和后序的构造相同,自己做出来啦!这道题用中序的数组来做还挺简单的,可能是不能重复定义吧!

2023-05-18 21:15:09 25

原创 代码随想录第17天|513,112,113,106,105

我的想法是之前利用递归和回溯的方法做过所有路径的显示,这次把要显示的路径变成加和用一个容器存储起来,看是否有和target相同的值(这个地方,如果用vector得一个个比较,改成哈希表,节省时间复杂度)。给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。另外值的注意的是定义的递归函数的返回值!==为啥我没想到,还是练习的不够多啊!本题要找出树的最后一行的最左边的值。

2023-05-17 20:15:50 29

原创 代码随想录第十六天|110、257,404

感觉递归法总是只可意会,不可言传,这里采用前序遍历,每次要先push_back(cur->val);然后这个回溯也很妙啊,得慢慢体会,主要还是整个递归的过程!这道题利用后序遍历的方法,从后往前计算,每次高度都要+1;又对递归有了更深刻的理解了!这样子的结果是19!

2023-05-15 21:55:44 35

原创 代码随想录第十五天|104,559,111,222

仍然是迭代法,最后就是要看children的个数!但是其实我没从题目原来给的Node的结构里看出来!使用迭代法,但是好像并没有用到完全二叉树,对于任意的二叉树的可以。和上面最大深度的不同之处,就是在于return的时机,还是对递归法搞不清楚,迭代法明白些!

2023-05-13 21:28:27 25

原创 代码随想录第十四天|102、226,101

还是用的递归法,需要注意的是总共有五种情况,左右都为空,都不为空且相等(这个时候进行递归),都不为空且不相等,一个为空一个不为空。不要写成else if了!不然就变成右结点不加进去了!属于有想法,但是没法用代码实现!真的好巧妙,这个size每次也是变化的。

2023-05-05 21:39:57 21

原创 代码随想录第十一天|239,347

这里不用考虑大于小于的情况是因为队列里的front值肯定是保存的最大值,队列不是一定会有k个值,所以不需要pop.对于12542 k=3这样的情况在从125到254过程中,由于2!=5所以,不会将最大值5删除,仍然是队列里的front!第一个参数是存储对象的类型,第二个参数是存储元素的底层容器,第三个参数是函数对象,它定义了一个用来决定元素顺序的断言。这里就是考虑要加进来的数,和前面从最近加入的数作比较,看是否需要删除。jia进来的数比前面的大,就删前面的。

2023-04-20 21:18:31 40

原创 代码随想录第十二天

int val;

2023-04-19 21:48:14 26

原创 代码随想录第十天|20、1047,150

一定要加一个是否为空的判断!haha.empty()不然会报错!这个地方也很巧妙,最后不要忘记掉转方向!主要是分清楚有几种状况,三种情况,左多右少,左少右多,中间有括号不对应。最后一句直接return kh.empty();另外注意是==(tokens[i]第一次接触栈但是感觉就是这道题就要用到栈的知识。(s.top ==“+”)的情况。注意tmp2和tmp1在减法和除法处的顺序!

2023-04-17 19:49:04 30

原创 代码随想录第九天|232、225

这道题理解了栈和队列的特性之后也没什么难的,注意que2只是一个辅助,在pop()函数里赋值给que1之后要删除掉。这道题目就用两个栈来实现一个队列,另外注意peek()函数。有很大一部分和pop()相同,注意复用即可!top()是取出栈顶元素,不会删掉栈里边的元素。pop()是删除栈顶元素。,最近添加就对应的是栈顶!

2023-04-16 17:22:22 30

原创 代码随想录第七天|344、541、剑指Offer 05.替换空格、151, 剑指Offer58-II

i–,j–)**这句话里面的i < j 的条件就是j比i大的,两者相等的时候就是数组遍历完的时候,每次有空格,j就会多走两步,直到最后数组结束然后才ij相等。i+=2*k)**这个条件很有意思,仔细想想!要注意的是reverse的范围是s.begin()~s.end();第一次接触数组填充的问题,知道什么时候用库函数。这道题我还想了蛮久的。这题没啥,理解就行。

2023-04-14 13:36:36 25

原创 代码随想录第六天|454、383、15,18

但是本题的题目意思是没有重复的三元数组!所以要比较前一个数,看有相同的就表示搜索过了!,最后在找到**nums[i]+nums[left]+nums[right]=0;**的结果时,也需要看看第二个数以及第三个数是否是重复的!而且没办法对与k+1或者i+1之后的值进行去重判断!这个地方很巧妙,我一开始还准备用first,second想了半天!还是跟之前一样,重复的nums3和nums4不用重复做!就是比三数之和多了一重循环,五数六数之和也是一样的!这题没啥,注意谁大谁小就行!学会了新的遍历循环的写法!

2023-04-12 14:32:51 16

原创 代码随想录第五天|242、349、202,1

我一开始想的是可以利用数组,两个数组扫一遍,出现多少在多少的位置加1,不重复相加,然后把两个扫完结果的数组进行相加,相应=2就是有相同的数,取出数组下标即可。我觉得这道题主要就是把两层for循环的内层换成了哈希表,减少了时间复杂度,不过构造了一个map容器是很巧妙的事情。我总是喜欢将第一个数组和第二个数组进行重复的操作,其实很多时候第二个数组可以直接利用第一个的结果!但是要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

2023-04-11 14:27:23 23

原创 ubuntu1804安装opencv以及contrib模块

报错:CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib‘解决:将opencv_contrib中的modules中的cudev文件夹复制到opencv/modules里。记录以下opencv4.5.4 以及contrib4.5.4模块的安装流程。再cmake便正常了,记得cmake的时候,先cmake clean。需要根据自己的显卡版本进行查询,网上有教程。本人使用的cuda版本是11.6, 另外。

2023-04-10 13:36:24 317 1

原创 代码随想录第三天|203、707,206

就是(编译器)创建一个对象,

2023-04-08 21:34:54 80 1

原创 代码随想录第二天|977、209,59

977:有序数组的平方209:长度最小的子数组59:螺旋矩阵。

2023-04-08 10:47:21 249 1

原创 代码随想录算法训练营第一天|704.二分法查找、27.移除元素

这题先想好是左开右闭的区间还是左闭右闭的空间,另外对于while循环的条件,一开始我写的是whilenumsmidtarget,这样写我首先要定义mid,另外在循环体还要不断重复书写更新mid的内容,另外如果所搜索的元素并不在该集合里面,就会进入死循环!这是不对的!

2023-04-05 20:30:04 110 1

空空如也

空空如也

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

TA关注的人

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