自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2025.3.24学习记录

按照递归的模板,传入的参数有一个要分割的字符串s,还有一个记录分割位置的startindex。结束条件:假如startindex大于等于s的长度说明分割结束,在result数组中存入path的数据然后返回即可。解题思路:本题给出的数组中允许含有重复的元素,因此本题最重要的一点是去重。重复的情况:当前元素等于上一个元素,而且当前元素used为true,上一个元素used为false。解题思路:按照回溯算法的模板,首先创建两个全局变量path和result,一个用来存储一次的结果,一个用来返回最终的答案。

2025-03-24 22:10:53 117

原创 2025.3.20学习记录

真难受,快写完了点了下鼠标侧键全都没了,也没保存。至少过了一遍手,,,前置知识:回溯算法的模板。

2025-03-20 23:11:01 135

原创 2025.3.18学习记录

解题思路:本题给出一个二叉搜索树,再给定一个区间,要求二叉搜索树的值都在给定的区间内,可能会改变二叉搜索树的结构。3,单层递归的逻辑,假如当前的结点的val小于low,说明该结点要被删除,由于二叉搜索树的性质,该结点的所有左子树也应该被删除,右子树可能满足要求,但是可能也有需要删除的结点。3,单层递归的逻辑,首先创建一个mid,然后建立一个新的二叉树结点,数组中下标为mid的数值即为二叉树的val。二叉树的中序遍历可以得到一个从小到大的数组,逆中序遍历(右中左)可以得到一个从大到小的数组。

2025-03-19 00:03:38 337

原创 2025.3.17学习记录

2,确定返回条件,当传入的root结点为空的时候,直接返回null。3,确定单层递归的逻辑,假如二叉树的p和q结点的数值都小于当前的root结点,就向左递归。假如root为空结点,说明此时就是要插入的地方,new一个结点,结点val设置为传入的参数,然后把这个结点向上返回即可。3,单层递归的逻辑,假如val小于当前遍历结点的值,就向左递归,使用left结点接收向左递归的结果。2,确定返回条件,本题涉及五种条件,没找到,找到了是叶子节点,找到了左空右不空,找到了左不空右空,找到了左右都不空。

2025-03-17 23:07:36 246

原创 2025.3.13学习记录

假如count和max相等说明找到了最大频率的数字,就放到result数组里面,假如count大于max,说明找到了更大的频率的数值,此时之前的全都不准,就清空数组,放入当前的数值到result数组里面。1,确认返回类型为二叉树的结点,传入参数为二叉树的结点以及给定的p,q两个结点。2,确认返回条件,当结点为空,返回null,当结点等于p或者q,说明当前节点满足条件,返回该结点。假如左为空,右不为空,说明右子树的结点是p或者q,返回right,左子树同理,假如二者都为空,则返回null。

2025-03-14 00:32:59 342

原创 2025.3.11学习记录

1,确定返回类型为二叉树的节点形式,传入的参数类型为一个整型数组。1:确定返回类型为二叉树的结点,传入参数为两个二叉树是的结点。2:确定返回条件,假如root1为空,说明此时二叉树的更新结果要以root2为准,假如root2为空,说明此时二叉树的更新结果要以root1为准。中:新建一个结点,数值设置为左和右结点val相加。递归法:1,确定返回类型为二叉树的结点,传入参数为一个结点,和一个要查找的数值。3,确定单层递归的逻辑:设置一个空结点,中:假如符合要求就让node指向root然后返回node,左右略。

2025-03-11 21:00:01 401

原创 2025.3.10学习记录

1,确定函数的返回条件:因为本题要求判断一个二叉树里面是否有满足条件的路径,因此返回值为bool型,传入的函数参数为一个node结点,一个sum数值。3,确定单层递归的逻辑:左:sum减去左节点的val,然后左节点进入递归,最后回溯,sum加回去左节点的val,注意,由于函数是有返回值的,假如左递归函数为true,就把true返回到上一层。解题思路2:采用递归的方法来处理。2,回溯:因为对左侧的处理要先让depth++,但是最终要倒回去重新从头结点开始计算,因此最后要将改变的数值变回原来的状态。

2025-03-10 23:21:54 383

原创 2025.3.5学习记录3

最后确定单层递归的原理:中:把结点放到path中,特别注意的是,因为函数返回是到了叶子节点就返回,而不是空结点,假如仍然把中放到返回条件之后的话,遇到叶子结点就return,但是叶子节点的数值并没有放到path中,因此要把对中的处理放到最前面,来保证让叶子节点也放到path中去。然后是左,向左遍历,但是要算从根节点到每个叶子节点的路径,因此要不断回溯,就是要让path的最后一项弹出去,右处理原理一样。需要求出左子树,右子树的和然后返回到根节点,一直向上返回,最后层层相夹即可,因此后序遍历最合适。

2025-03-05 20:49:23 287

原创 2025.3.5学习记录2

首先确定传入的参数和返回的类型,返回bool类型来判断是否符合题目要求,传入一个根节点的左子树和右子树。接着确定返回的类型,返回类型如代码所示。先遍历左左和右右,再遍历左右和右左,最后是对中的处理,设置一个result,返回result即可。然后确定返回类型,假如遇到空结点,说明当前深度为0,然后是单层递归的逻辑,略。接着确定单层递归的逻辑:中:对两个结点进行交换,左:向左遍历即可,右:向右遍历即可。注意:本题可以使用前序遍历,后序遍历,假如使用中序遍历,原来的“右”要改成对root的左子树进行遍历。

2025-03-05 20:00:11 322

原创 2025.3.5学习记录1

然后设置for循环进行遍历,让对头的元素出队,然后把它放到vec数组中。首先设置一个栈用于储存遍历的结点,再设置一个数组用于存放最终遍历的结果。此时cur为空,就让cur指向栈顶元素,然后弹栈,result数组存放。解题思路:递归首先要确定函数的参数以及返回的类型,然后确定终止条件,最后再确定单层递归的处理逻辑。当结点为空的时候就返回,接下来是单层递归的逻辑,遇到中的时候就把该结点放到数组中,然后是左,就向左遍历,最后是右,就向右遍历。中,右,左的顺序改为中,左,右,最后再倒置result数组即可。

2025-03-05 17:04:45 262

原创 2025.3.4学习记录:哈希表

假如等于0,就将三元组放到result数组中,然后对left和right进行去重,去重结束后,left--,right++。接着是对i进行循环遍历,此时应该将i和k对应的元素相加作为一个整体,接着是剪枝,去重,与k类似。可以先对前两个数组进行遍历,用map中的key保存遍历过的a+b的数值,用value保存a+b出现过的次数,然后再对后两个数组进行遍历,每次遍历的时候寻找0-c-d是否在map中出现,如果出现,就给count加上对应的value的数值,后两个数组遍历完成,即为结束,返回count数值即可。

2025-03-04 23:50:57 249

原创 2025.2.24学习记录1

解题思路2:由于该题目要求找出重复的数组元素,比如数组一为2,2,2,3,3,4,数组二为1,1,1,2,3,那么输出结果为2,3,不可以重复,因此使用unordered_set数据结构。设置一个大小为26的数组,再对string s进行遍历,如果出现某个字母,就对该字母对应的数组的元素值加一(如:含有字母a那么对s[0]++)再对string t进行遍历,如果出现某字母就对该字母对应的数组的元素值减一(如:含有字母a那么对t[0]--)最后再对该数组遍历,假如元素值全都为0则返回true。

2025-02-24 22:14:36 502

原创 2025.2.8学习记录1

设置while循环,循环条件是while(fast&&fast->next&&fast->next->next)因为快指针一次走两步,所以要保证当前,下一个,下下一个不为空。因为题目交换结点涉及到对cur指向的下一个和下下一个结点的操作,为了避免空指针,要保证下一个结点和下下一个结点不为空。然后让快指针向后移动n步,此时再让慢指针和快指针同时向后移动,直到快指针的下一个结点为空则停止。解题思路:由于涉及到链表的交换操作,为了保证对第一个结点的操作与其他结点相同,因此引入头结点。交换的逻辑:看代码不难理解。

2025-02-09 00:46:58 285

原创 2025.2.7学习记录1

首先是设置一个cur指针指向头结点,再是设置一个pre指针,用于让cur指针的next指向pre,在第一个cur指针指向next是null,因此pre指针初始化为nullptr。循环的操作为:先设置一个临时指针t来保存下一个cur的位置,再让cur的next指向pre,令pre指向next,cur指向t即可。循环结束时cur指向cur,pre指向新的链表的头结点,返回pre即可。而且移除某个元素需要这个元素之前的元素的信息,因此再设置一个指针p指向头结点,指针q指向首元节点。循环结束即删除操作完成。

2025-02-07 20:24:53 257

原创 2025.2.3学习记录1

可以设置一个数组presum,每个下标对应元素的值为原数组中从当前下标开始到第一项所有元素之和,这样求某一项到某一项的区间和只用对presum数组进行简单的减法操作即可。(这个题的具体操作在于对边界的判定,语言描述比较困难,可以看代码意会,,,,)注意:while (cin >> a >> b):在 C++ 中这种输入方式通常用于需要处理未知数量输入的场景,比如:当你希望持续读取整数对,直到用户输入结束(通常通过 Ctrl+D 或 Ctrl+Z 提交 EOF)。注意:abs()表示绝对值,注意用法。

2025-02-04 00:17:46 252

原创 2025.2.2学习记录1:数组

令mid等于(low+high)/2,当mid对应的数值大于要查找的数值,则令high等于mid-1,若mid对应的数值小于要查找的数值,则令low等于mid+1,若 mid对应的数值恰好等于要查找的数值则直接返回。双指针思路:慢指针为i,i的数值初始化为0,快指针为j,j的数值初始化为k-1,即数组最后一个元素,由于数组从小到大排序且含有负数,所以新的result数组应该从后往前更新。如果下标i的平方大于下标j的平方,就让result[k]等于nums[i]的平方,然后i++,k--。

2025-02-02 10:58:36 374

原创 2025.1.24学习记录1

假如cur不指向null,就让cur指向的元素入栈,cur继续往左边走,假如指向空了,说明走到最左边了,这个时候就应该对cur指向的上一个元素进行操作,也就是栈顶元素。让栈顶元素等于cur,再让栈顶元素出栈,cur指向的数值进入result数组,此时左根右中完成了左和根,再让cur往右走,以此循环。再让此时栈顶元素的数值进入result数组,然后再分别让右,左元素进入栈中即可,注意顺序是右左而不是左右,因为栈后进先出的性质,入栈顺序是右左则进行出栈处理的时候处理顺序即为左右。然后用for循环遍历这一层。

2025-01-24 21:18:12 332

原创 2025.1.18学习记录1

下面来解释三个函数的思路:首先先定义一个deque(双端队列)pop:如果函数不为空,并且函数在字符串遍历的过程中要删去的数值等于当前队列中的front就让front的元素出队,否则说明要删去的元素在push过程中已经删去了,无需进行额外操作。1,对于一个字符串是否为数字的判断:首先判断该字符串是否为空,如果是空的直接返回false。获取其栈顶元素并返回即可。因为大顶堆根是最大的元素,而且要控制数组元素不超过k,所以必然涉及到元素的移除,移除会移除根,也就是最大的数字,与题目要求不符合,因此用小顶堆。

2025-01-19 21:38:42 599

原创 2025.1.17学习记录1

一,代码随想录看答案之后的解题思路:用栈来实现队列,栈是一边压栈同一边弹栈,队列是一边入队另一边出队。因此如果要用栈来模拟队列,需要两个栈才可以。因此定义两个栈,一个用来入队,一个用来出队。push:stIn直接压栈即可。pop:当stOut不为空,则直接让stOut弹栈,否则让stIn所有元素出栈,然后再进入stOut后,再让stOut弹栈即可。top:定义一个result为pop函数的结果,让result入栈stOut,返回result即可。empty:当两个栈都为空那么队列为空队列。

2025-01-18 08:09:05 653

原创 2025.1.16学习记录1

看答案之后的解题思路:解题思路分为三大步骤,第一步先去掉所有冗余的空格,第二步再对整个字符串进行倒置,第三步再对字符串中的每个单词进行倒置最终实现只有单词反转的效果。大致思路如下:首先先设置一个快指针一个慢指针,for循环对快指针进行操作,让快指针移动,当快指针指向的不是空格说明此时要进行“向前移动”的操作。对于要给每个单词之间留一个空格的操作,可以在“向前移动”单词之前判断一下慢指针是不是第一个,如果是第一个那么不用留空格,不是的话,先让慢指针指向空格再++,然后进行“向前移动”即可。

2025-01-16 19:23:37 180

原创 2025.1.15学习记录1

看答案之前解题思路:题目描述为每计数2k个字符则让前k个字符反转,那么可以先设置一个下标为i的大循环,再在这个大循环里面设置下标为j的小循环,再设置一个count计数器用于计算数了多少次2k。每当j计数到2k个的时候,让count++,再对2k中的前k个元素进行反转,最后循环退出时j的数值即为剩下的没有进行操作的元素个数,假如元素 个数小于k那么对这所有元素进行反转,假如大于k那么对前k个元素进行反转。解题思路:设置两个下标i与j,其中i指向字符串的第一个元素,j指向字符串的最后一个元素。

2025-01-15 18:08:07 233

原创 数据结构总结笔记1

代码的答题思路如下,首先确定插入元素的位置,然后判断插入元素位置是否合法,再判断顺序表存储空间是否已满,若已满则返回error,然后用for循环将从第n位到第i位的元素依次向后移动一格,为新插入的元素腾出空间,然后新插入的元素放到第i个位置,最后将表长加一,插入完成,代码结束。代码的大致思路与插入大致相同,首先判断删除位置是否合法,然后将想要删除的元素保留在e中,然后利用for循环将第i+1个元素到第n个元素全部向前移动一位,最后表长减一,删除成功返回OK,代码结束。b顺序表的取值(获取第i个位置的元素)

2024-07-31 12:30:55 143

p192.8_max10.c

p192.8_max10.c

2023-12-24

期中最后一题.cpp

期中最后一题.cpp

2023-11-24

空空如也

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

TA关注的人

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