- 博客(59)
- 收藏
- 关注
原创 【无标题】两个相同字符串中不同字符的个数
这道题我不会做的点就在与不知道相同字符中间不同字符的个数该如何表示,看了老师给我讲,我才明白先让哈希计数器中,每个元素都标记为-1.表示出现过一次,然后将下标赋值给只出现过一次的元素,假如这个数字出现过第二次,那么它的值就不是-1.就要用i-hash[s[i]]-1;
2026-04-07 20:32:33
195
原创 1008前序遍历构造一棵二叉树(如何去构造一棵二叉树)
通过这个题, 我终于学会了怎么去构造一棵二叉搜索树,首先核心的地方就是用l和r来划分这个区间,我们知道二叉树的左边所有节点都比根节点小,右边所有节点都比跟节点大。
2026-03-17 19:15:19
36
原创 99恢复二叉搜索树(让两个值交换位置)
如上7 4与6 3 是两处逆序的地方,我们只需要定义一个x,定义一个y,一个记录逆序后的节点,一个记录逆序前的节点。然后再交换两者位置即可。这个题我主要学到的方法是怎么将两个不是紧临的数字交换位置,首先二叉树中两个数字位置颠倒必然会产生逆序如,
2026-03-15 16:04:08
26
原创 501.二叉搜索树中的众数()
我们先定义一个pre代表前一个节点,然后出现的次数count,然后最大次数maxcount,如果当前节点与前一个节点的树相同的话则count++,否则让当前节点成为pre,然后count=1。如果count>maxcount的话,说明我们将跟新maxcount,然后将数组清空,让这个节点的值进入数组当中去。这个题还是让我有点头脑不太清醒,有点迷惑,首先这个题让你求二叉搜索树中出现最多的次数,即众数,我们知道二叉搜索树是只增不减的,故相同的树肯定是相邻的,然后我们再把他们放到一个数组当中去。
2026-03-15 14:14:00
22
原创 052递增顺序搜索树(哨兵节点的用法,即虚拟头节点)
3. 保证结构稳定:即使原树为空(ret 为空),head->right 也会是 nullptr,不会出现野指针。这道题首先定义一个哨兵节点,然后让curr指向这个head。这样避免了根节点为空的情况。2. 简化代码:避免因为 head == nullptr 而写额外的分支。1. 消除空链表/空树的特殊判断:让所有节点的处理逻辑统一。
2026-03-12 20:51:22
20
1
原创 98验证二叉搜索树
首先我的问题是中序遍历掌握的不牢,它的思路就是首先这个节点不为空,然后我们递归节点的左子树,然后将这个节点的值输入到这个数组当中,然后再遍历右子树,最后判断这个节点当中的数字是否单调递增即可。这个题必须要牢记:二叉树搜索树中序遍历必须是一个递增的序列,利用这个我们只需要判断这个是否为递增的即可。
2026-03-12 19:51:47
28
1
原创 【无标题】1302 层数最深叶子节点的和
第二个函数是求和函数,首先我的递归出口的条件错了,我的判断是假如左子树和右子树均为空的时候,这样反而会漏了最大深度,因为这样做相当于只要是没有孩子节点,就返回0,而我们要的是最大深度的节点,正确的应该是当此节点为空的时候,我们返回0,这个题首先要两个函数,一个函数来求最大深度,我做第二遍的时候感觉思路很模糊,就是因为我没有想到先定义一个最大深度,然后再不断更新最大深度的值,如果左子树的深度大于最大深度,我们就将最大深度的值替换,右子树也一样。
2026-03-11 20:29:26
36
原创 1379 找出克隆二叉树中相同的节点
这个题我值得总结的就是在运用递归的时候,我们必然要先考虑左子树然后后考虑右子树,所以以后可以当一个固定的模板格式,然后还要注意在做这种题的时候,要考虑根节点就是目标节点,和根节点就是空节点的情况,我对递归现在是可以看懂并且有一点思路,但是让我自己做还是很困难,希望通过后续的学习有所长进。
2026-03-09 21:02:30
41
原创 226以翻转二叉树来举例子讲清楚递归
首先,我们先处理头节点的左节点,也就是2。然后以2为头节点,处理2的左节点1,然后以1为头节点,发现他是空,所有我们返回NULL。然后继续来到我们的上一个头节点2,处理他的右节点也就是3,我们发现他也是空,所有我们也返回NULL。然后又继续返回到上一个头节点也就是4,我们现在要来处理他的右节点也就是7,用上述方法处理下去就可以了。很多时候拿到递归题看到代码不清楚这个代码该如何运行,是先执行哪句后执行哪句,这篇将以这个题目为例,将清楚递归中我不明白的地方。现在我们将代码这个递与归好好拆分成一块一块的代码。
2026-03-09 16:42:44
29
原创 【无标题】2390:从字符串中移除*
这里(借用下某人的总结)我认识到,string类型的变量可以直接使用string库里面现成的接口,比如push_back(),pop_back(),其实与vector里面的接口是差不多的,所以以后可以直接用。
2026-02-03 19:27:15
154
原创 【无标题】535:tingurl的加密与解密
这道题是想加密,输入一个很长的url返回一个短的url。然后解密,输入短的url,返回那个长的url.总结:异或可对地址进行加密操作。
2026-02-03 15:39:20
191
原创 leetcode统计一致字符串的数目(哈希表)
我们先将allowd数组中的元素都标记为1,表示出现过,然后遍历words数组的每个元素,然后再遍历一遍words数组中每个元素的每个字符,如果发现这个字符在哈希表中没有标记成1,代表没有出现过,这时候我们break跳出循环。本题我并没有想到要用哈希表标记数组的做法,这说明我对哈希表,标记数组这一块的知识点掌握的并不是很熟练,这道题让我们在words数组中的每个元素的每个字符在allowed数组中是否出现。我们先定义一个哈希表,其中的元素都为0.
2026-01-31 18:21:45
161
原创 leetcode182动态口令(将字符的前几个元素放在字符串后面)
这个题我一直在想会不会用到栈队列顺序表的操作方法,但是看完老师的方法我明白了,这个题就是想把前几个元素放到字符串后面,让其构成一个新的元素。代码的具体思路如图三所示,这是一种新的思路,我需要学习,这个题巧妙的利用了取模的做法,还有数组下标i+target的做法。
2026-01-31 15:49:15
147
原创 【无标题】航电oj:找字符串中最大的字母
另外,我对字符串的题目还是不太熟练,我并没有想到,将max插入到最大字母的后面,可以先重新定义一个字符串这个字符串为空,然后再遍历一遍字符串的方法,将原字符串的内容一个一个的插入到这个新字符串中。本题我犯了一个错误直接想着直接用strcat来连接,但是这样是不行的,因为strcat是连接两个字符串的,本题要求将max插入到最大字母的后面去。
2026-01-29 14:25:46
46
原创 航电oj:首字母变大写
要将首字母小写转成大写,要考虑字符串的首元素(s[0]),还有如果字符前一位是空格的话,证明这个字符也是首字母。小写字母a到z是ASCLL码值是97到122。A到Z的ASCLL码值是65到90。所以将小写转成大写只需要用。本题:的主要知识点是。
2026-01-28 23:32:04
51
原创 航电oj:统计字符串中汉字的个数
在本题中他起到了一个消除换行符的作用。因为在输入n的时候,假如输入为2,按完回车之后,实际输入到缓冲区的内容是2\n,如果不处理这个\n,后续的fgets会直接读取到这个残留的\n。fgets(数组名,数组长度,输入源)其中输入源可以直接写成stdin。,又因为最高位是1的补码都是负数,所以可以判断是否小于零来找。但是getchar的用法不止于此,等下次碰到再补充吧。用法:fgets(s,sizeof(s),stdin)这个题目本身不难,但是涉及到了好多我不太会的知识点。
2026-01-27 19:55:03
65
原创 牛客周赛127(b)
然后判断每一行是否有重复的元素,定义一个标记数组来标记这个,(这个vector的标记数组默认初始值是为0),假如碰到了重复的元素,g[arr[i][j]便会自增。标记完一行二维数组的元素之后,我们就来判断这个一行中1到4的元素是否出现了一次,假如不等于一次,就直接结果等于false。判断宫是一个重难点,难在我们如何将他分成四块区域。首先第一层循环是将四行分成两行的,(int i=0,i+1<4,i+=2),再将列分成两列(int j=0;j+=2)然后将分成的两行两列,分成四个宫。
2026-01-23 16:44:08
47
原创 【无标题】(leetcode933)最近的请求次数
本题:我刚开始没有读懂题目的意思。到后面我看了题解才大概明白。其中recentcounter()是一个构造函数。然后queue<int> q相当于创建一个列队的成员变量。
2026-01-22 18:23:00
41
原创 1.21从链表中移除节点(用栈来做)
还有个问题就是最后的stk中的元素已经是我们要的结果了,但是他的类型是链表的节点的类型,所以让stk中的元素排一下序。让stk的尾部指向NULL。:本题我会用了虚拟节点的办法来处理问题。虚拟 节点可以不用考虑头节点被删除的情况,可以不用特殊考虑头结点的情况。本题:我的大体思路对了用栈来做,如果入栈的元素比栈顶元素大的话,就将栈顶的元素出栈。
2026-01-21 21:27:30
44
原创 1.20单调栈(每日温度)
本题是要找比当前元素大的下一个元素,其实就可以将每个当前元素当栈顶,然后进栈下一个元素。如果下一个元素比当前元素大,就将当前元素出栈,将这个下一个元素压入栈顶,当成栈顶元素,依次类推。因为假如遍历循环到75时,75下一个71,71下一个69,69下一个72,72比69大故将69出栈,但是72也比71小故也要出栈,所以要用while循环。反思:本题我忘记了这个栈不能为空。然后while为什么不能改成if。
2026-01-20 15:12:20
36
原创 【无标题】括号的最大嵌套深度
因为一个左括号必定对应一个右括号,所以只用计算左括号就行了,当产生了右括号时,证明是一个完整的括号,就让统计出现左括号的次数减一就行了,这样就可以将次数恢复到原先。本题:我的问题是没有仔细思考题目,并且想出方法。
2026-01-18 16:22:17
37
原创 !!!当while(curr)遍历完链表后,这个curr已经指向空了,要想再遍历一遍链表的可以用while(head)
【代码】!!!当while(curr)遍历完链表后,这个curr已经指向空了,要想再遍历一遍链表的可以用while(head)
2026-01-17 18:51:54
40
原创 【无标题】1.17给定一个数将其转换为任意一个进制数(用栈的方法)
总结:要将其转换为一个任意进制的数,只需要先用这个数去对 这个进制数取余,然后再将这个数除以这个进制数。取余的结果就是这个数转换为任意进制的数的结果。如5转换为二进制数为101 ,4转换为二进制数为100。
2026-01-17 17:33:43
59
原创 蓝桥云课:分巧克力(二分查找法)
当找到1与r(边长最大值)的时候,我们要取中间值mid,然后遍历每个长方形,若mid不超过给出的长方形的长与宽,则可以将这个长方形总共可以产生的正方形数目加到总sum中,以此判断完所有的长方形可以产生的小正方形。接着用产生的正方形的总数量与总人数产生对比,若大于等于总人数的话再从mid右边找值(也就是找边长比mid还大的值),若小于总人数的话说明边长大了,就从mid左边找值(也就是找边长比mid还小的值)。本题:是一个二分查找的题目,要选出符合要求的巧克力的最大的边长。在二分查找的过程中逻辑不太会写。
2026-01-17 15:15:07
55
原创 【无标题1.16 迭代的方法 反转列表
本题运用迭代的方法,首先将节点的前驱pre为NULL,让节点为curr,并且将节点的后继用一个指针next储存起来。首先先将节点一个一个的遍历起来,用pre指向curr,再用curr指向next,直到curr的next指向空时,此时链表进行翻转,箭头也要翻转,将curr的后继指向它的前驱。
2026-01-16 13:47:00
35
原创 11.26利用标记数组移除重复节点(面试题02.01)
• 这个“标签”会一直保存在数组里,后续遍历到curr时,只需通过arr[curr->val]就能快速查看到当前值是否在之前的节点中出现过,而非curr->val本身去遍历之前的数字。数组arr的下标对应链表节点的数值,数组值为1表示该下标对应的数值已经在curr之前出现过,为0则表示未出现。• 遍历链表时,每遇到一个新的非重复值,就把arr[该值]设为1,相当于给这个值“打标签”。
2025-12-26 21:42:25
159
原创 12.24(图书整理)倒叙链表,并用顺序表返回链表的值
这个题我刚开始看到返回值是vector是一个顺序表数组的时候,我不知道该怎么将顺序表和链表进行连接,看了老师的代码才知道,先定义一个vector数组,将链表中的值循环遍历,然后利用push_back将链表里面的值插入到顺序表里面。将两个指针进行交换,最后返回这个res数组即可。反思:看到vector和顺序表就要想到数组。并且我老师忘记数组移动时的代码,误认为在循环里面,数组就自己移动了,所以忘记写l++和r--这个代码。链表是通过一个一个节点的next进行连接的。方法二:reverse反转函数。
2025-12-24 10:33:56
223
原创 12.22删除中间节点(只给了要删除的节点,没有给要删除的前驱节点的情况下)
反思:这个题要注意的就是,给的节点是要删除的那一个节点,故可将后面的这个值赋值给这个要删除的值将这个要删除的值做为前驱节点。
2025-12-22 19:36:04
207
原创 【无标题】12.18找链表的中间节点的两种做法
方法:找列表中间节点的做法就是让快指针走两步,慢指针走一步,如果快指针走完两步时发现,后面的链表节点为空(第二个两步的第二步),这时链表的长度是偶数,则返回慢指针指向的下一个指针。反思:在本题中,我老是将fast和fast->slow弄不清楚到底是指当前的fast还是fast所指向的下一个指针。如果快指针走完两步后,走第二个两步时,发现第二个两步的第一步为空时,则说明链表长度是奇数,则返回当前的slow。
2025-12-18 21:02:34
158
原创 12.17快慢指针解决倒数第k个节点的问题
这题要用到快慢指针的方法,先让快指针走k步,然后让慢指针再走,当快指针走到链表的尾部的时候,慢指针所指向的那个结点的数值即是,倒数第k个值。
2025-12-17 19:22:05
136
原创 12.17用链表解决二进制转十进制问题
然后我看了老师的解法,老师直接用了一个sum来定义这个十进制数开始值是0,然后while循环,条件是head,至于为何是下面的那个表达式,我们可以通过这个来反推5/2=2余1,2/2=1余0,1/2=0余1.这样我们便可以发现用余数+商*2便可以得到除数。反思:误认为head仅仅代表链表的头节点,实则上,他代表的是整个链表的节点,如我们平时写的listnode *curr=head;本题 我刚开始的想法是将链表的长度得到,然后循环遍历这个链表,将链表中的数据一个一个的插入进去,但是其实这样并没有什么作用。
2025-12-17 18:39:10
183
原创 【无标题】2341:统计数组中有多少对相同的数字,并删除其相同的
是先将数组中的元素排序,然后一个while循环,遍历一下这个数组中的所有元素,当碰到前一个和后一个相等时,i+=2,count++。定义一个数组,也就是数组a,然后循环遍历原数组中的数,这样就可以统计原数组中每个数字出现的次数,然后遍历整个数组a,让其中的每个数字除以2,这个题的要求是找数对,然后找出形成数对后剩下元素的个数,刚开始我犯了一个错误是想着怎么删除含有两个相同元素的数对,但是其实并不用这么做。
2025-12-14 13:10:54
145
原创 【无标题】12.10在代码中遇到要将数字转为二进制的数应当如何做
然后放在一个循环里面,这样就可以判断,这个数二进制的每一位是不是1了。将x&1,这也就是判断这一位是奇数还是偶数,然后再将x右移,也就是。由此可见,要想取得一个数的二进制数,得先对2取余,然后除2。此题中,最核心的部分是要将数字转换为二进制的数。首先要了解将数字转为二进制数的过程,别人10。
2025-12-10 20:25:35
189
原创 12.6双指针问题
的第一个元素,另外一个指针指向数组的最后一个元素,然后当首指针小于 尾指针时,进行判断,如果当前指针指向的数是给定数时,将它替换到尾指针这里,然后r--即可删除这个相同的元素,如果与给定数不相等时,便可以让首指针l++,这个即使与给定数字不相同的新数组。当刚开始写的时候我犯了一个错误,就是while循环遍历了整个数组,这样写是不对的,因为数组的长度是在随时变化的。这样影响了数组长度的判断。这个题目利用了双指针的思想,给定一个数,要删除数组中与这个给定数相同的数目,我们可以利用双指针,让一个指针指向。
2025-12-08 18:59:33
244
原创 12.8力扣 找到数组中间位置
这个题我想到了要把左边的值和右边的值累加起来,但是我计算middleindex时,将j写成了nums.size()-1,但其实这样会让代码复杂,并且不好找中间值。最好的办法是,第一个循环遍历所有的值,中间嵌套的一个循环遍历从j=0到i的值,中间嵌套的第二个循环遍历从j=i+1到nums.size()的值这样就可以很好的将i视为middleindex。
2025-12-08 18:13:16
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅