自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day26-二叉树的最小深度

从根节点 1 到叶子节点 4 (左子树) 的路径是。从根节点 1 到叶子节点 4 (右子树) 的路径是。从根节点 1 到叶子节点 4 的路径是。从根节点 1 到叶子节点 5 的路径是。从根节点 1 到叶子节点 6 的路径是。从根节点 1 到叶子节点 5 的路径是。感觉模板还是挺耐用的,多动手练吧。

2025-08-03 23:18:30 335

原创 Day25-对称二叉树-

左右节点入栈\队列,然后创建一个新的指针只想他们,如果不是空节点就continue,但凡有一个节点为空或者对应的值不一样直接返回false。递归法:自己实现一个比较左右节点的函数,然后去递归实现就好了,不过需要注意的是在判断的时候要镜像的判断!C语言实现,其实C++也一样的了,不过使用层序遍历要注意一下,C语言需要使用数组去实现。C++写的,C语言就不同了,C语言使用数组去模拟队列。迭代法的话代码就长一点了,但是感觉会比较直观,(根为第 0 或 1 层,看约定)。使用C语言实现的,C++也一样。

2025-08-02 23:52:54 615

原创 Day24-翻转二叉树

可以使用递归和迭代方法,然后递归的话就使用前序遍历和后序遍历,中序遍历不太好实现;然后层序遍历的话也可以,就是使用栈去模拟。③这时候要创建一个新的节点去遍历,把根节点弹出来之后,根据栈的后入先出的特点,感觉套路和之前的代码结构都很类似,具体的实现强烈建议动手去模拟一遍!哈哈前两天的题忘了带题目和链接了。②先加入根节点,然后去遍历左右孩子;递归的代码是不是比较好理解一点?,要先存放右节点,再存放左节点(

2025-07-30 23:28:29 297

原创 Day23-二叉树的层序遍历(广度优先搜素)

先把根节点加入队列,然后在队列弹出来元素之前用一个node去指向它,弹出来元素之后先把node->val加入一维数组,然后用node去把它的左右孩子加入队列。每遍历完一层的节点之后把一维数组加入结果数组。思路如下:一层层的去吧结果遍历到结果数组中。层序遍历的思路基本上就是这样了。

2025-07-29 23:13:07 302

原创 Day22-二叉树的迭代遍历

昨天学习了递归遍历:递归就是一次次的把参数压入栈中,然后返回的时候还是上一次递归保存的参数。今天学习迭代遍历。迭代遍历就是用栈去模拟保存二叉树的节点,然后依次去遍历,只不过要注意栈的后入先出的规则。前序遍历:前序遍历的顺序应该是中左右,每次先处理中间节点,先把中间节点放入栈中,然后只要栈不为空就再调用一个指针去遍历二叉树,不过这个时候顺序应该是:12453栈初始化为[1]→ 弹出1,记录1,压入3, 2(栈变为[3, 2]弹出2,记录2,压入5, 4(栈变为[3, 5, 4]弹出4,记录4。

2025-07-28 23:02:52 427

原创 DAY21-二叉树的遍历方式

Traversal(TreeNode *root,vector<int> &res)好了,中序和后序就先不看了,递归估计手撕也不会考二叉树的,二叉树这地方模拟考的比较多!①:递归的终止条件?感觉递归还是需要重点去理解一下的,一想就会,一写就废,③:递归的单层逻辑是什么?(个人感觉这个比较难去实现,就是怎么样确保每次递归都能干你想干的事情)去保存根节点,然后再去递归左节点和右节点。②广度优先遍历:就是一层层的去遍历,②:递归的传入参数和返回值是什么?把每一层的节点加入队列进行遍历。①:递归终止的条件是什么?

2025-07-27 23:16:58 534

原创 Day20-二叉树基础知识

二叉树(Binary Tree)是一种每个节点最多有两个子节点的树形数据结构,这两个子节点分别称为左子节点和右子节点。二叉树是计算机科学中最基础、最常用的树结构之一,广泛应用于搜索、排序、表达式解析等领域!节点结构 每个节点包含三部分:数据域(存储值)左指针(指向左子节点)右指针(指向右子节点)递归定义 二叉树可以是:空树(无节点),或根节点 + 左子树(二叉树) + 右子树(二叉树)。子树有序性 左右子树的顺序不能颠倒(即使只有一个子节点,也需明确是左还是右)。 节点1是根,2和3是1的左右子节点。

2025-07-22 23:12:43 826

原创 Day19-翻转字符串里的单词

如果第一个指针指向的不是空格(s[i]!= ' ' )就继续执行去复制,是的话就直接跳过。= 0 说明不是第一个单词,我们需要手动去添加一个空格。实现了reverse函数和移除空格函数,后面就好整了。我们可以先删除所有的空格,这个我个人感觉是最难的。先处理一下,移除空格,并且将整个字符串数组翻转一下。的解法之后,感觉这种方法更好理解把。之前用模拟的思路做过一次。什么时候去更新数组呢?

2025-07-18 23:11:34 457

原创 Day18-力扣动态口令

思路有了之后代码应该也可以,毕竟都是反转,可以自己手动实现reverse函数。又因为字符串和数组访问起来差不多,所以这时候直接进行翻转。思路:做这道题目之前应该先做一下。就是利用双指针进行挨个对换。还有昨天的翻转字符串的单次。②:反转n-end的字符。swap实现就不说了。③:反转整个字符串数组。

2025-07-17 22:46:27 328

原创 Day17-151.反转字符串中的单词

思路:忘了有没有做过了,反正这个思路就是定义一个左右指针,去看一下左指针是不是等于val,如果左指针等于val的话,直接修改nums[left] = nums[right-1];还有一个思路就是定义一个左指针为0,右指针也为0,用右指针去遍历数组,当右指针的值不等于val的时候,左指针的值直接去等于右指针的值。先定义一个右指针,然后右指针去倒着遍历,当遇到第一个非空的时候停止。移除数组里面的元素的,也是双指针的思路。然后这时候定义一个新的指针去记录当前的位置。之后再去遍历,当遇到下一个空格的时候停止。

2025-07-16 23:11:52 463

原创 Day16.541反转字符串

思路:由于无法直接在字符串数组进行替换,那么我们可以先计算空格的数量,之后在扩容后的字符串数组上直接利用双指针进行移动赋值。从i=0开始,每次反转子串[i,i+k),然后i=i+2k。如果i+k>n,那就反转后缀[i,n)。题目说了是每2k个字符,只反转前k个,所以我们在遍历的时候可以直接i += 2*k;空间复杂度: O(1)或O(n), 取决于使⽤的语⾔中字符串是否可以修改。如果剩余的字符串小于k个,那么我们直接全部翻转即可。个人感觉模拟的题还是比较难思考的。

2025-07-15 21:44:01 323

原创 Day15-力扣15.三数之和-复习双指针!

如果一开始就去重,当遇到0,0,0这种情况呢?

2025-07-09 22:54:34 937

原创 Day14-力扣454.四数相加

就是A字符串遍历一边,然后用一个哈希表或者数组去记录每个字母出现的次数!一定要记录次数,然后在遍历B字符串的时候再去把对应的字母的次数--;只要有某一个值小于0,那么就说明A字符串中某一个字母的次数比B字符串中这个字母的次数要少,所以无法构成!后面还有一个难度升级的:就是给出一个数组(而不是四个数组),在这里找出四个元素相加等于0,答案中不可以包含重复的四元组。就是这道题目是四个独立的数组,只要找到A[i]+B[j]+ C[k]+D[l]=0就可以,思路:这个题感觉和前面做过的有效字母的异位词有点类似诶。

2025-07-08 22:54:30 372

原创 Day13-力扣242.349 哈希表入门题

当然我们可以维护一个数组,用一个map去遍历第一个数组,然后记录下key,并且把对应的value置为1,再去遍历第二个数组,如果第二个数组中有元素和key的值相等,那我们就把value置为0,同时将结果存放在数组中!就是去遍历两个数组,记录第一个数组出现元素的次数,然后遍历第二个数组看是否有元素出现在第一个数组中?我是这么认为的,既然要考虑两个数组的交集,如果有重复元素怎么办?因为unordered_set 是去重的,所以我们只需要判断数组2中的元素是否出现在unordered_set 中!

2025-07-07 22:35:57 436

原创 Day12-力扣128.49-最长连续序列.字母异位词分组

直接上题:法1:就是定义两个变量,遍历完一遍数组即可,有几个需要注意的地方。好吧,这样的话时间不允许,因为要花时间去排序。法2:哈希表1.使用一个哈希set去重, 查找元素的话就是O(1)然后然后,我又看了一个1ms的解析,哇去!太妙了。

2025-07-06 17:00:00 705

原创 Day11-哈希表-两数之和

去遍历数组,发现9-1=8不在结果哈希表里面,那么就下一个,并且把1加入到哈希表;然后9-2=7也不在,加入2;这三种结构是比较常见的,Set的话昨天提到过unordered_set(不能重复),他的底层实现就是哈希表,而set和multiset(可以重复)是红黑树,红黑树是一种平衡二叉搜索树。题目说了假设每种输入只会对应一个答案,不能使用两次相同的元素,ok,不能使用两次相同的元素那你还用什么哈希表?当然了哈希表查找元素肯定会非常快,但是又会引入一个问题:哈希碰撞,就是说一个键值有很多个索引,

2025-07-05 22:23:20 499

原创 Day10-力扣142-707 环形链表

然后就开始第二个简单题,就怕链表定义的题,如果面试真的问到了,不会初始化链表岂不是很尴尬,然后就是增删查改各种……思路还是不太好想的,听了卡尔老师的思路然后又看了华南溜达虎老师的课感觉自己不适合搞算法。实现,用于存储唯一的元素。它提供了快速的查找、插入和删除操作,非常适合用来处理需要快速判断元素是否存在的情况。的底层实现是哈希表,因此它提供了高效的查找、插入和删除操作。:当哈希表的负载因子(元素数量与桶数量的比值)超过一定阈值时,中的元素存储顺序是无序的,与插入顺序无关。中的元素是唯一的,不允许重复。

2025-07-04 21:56:50 1194

原创 Day9-力扣19、24

fast⾸先⾛N + 1步 ,然后让fast和slow同时移动,为什么是N+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上⼀个节点(⽅便做删除操作)是 C++ 运算符,分配内存的同时调用构造函数,是面向对象的动态创建方式,两者不能混用,功能差异显著。还是虚拟头结点的应用,这样就避免了针对第一个节点的处理。删除倒数第N个节点,那肯定是把N-1的指针指向N+1呀?C语言写法差不多,就是malloc和new的区别了;关键是如何准确的将指针移动到N-1呢?②结点2指向结点1,节点1指向节点3。

2025-07-03 17:45:00 357

原创 Day8-链表——虚拟头节点!!!

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。和数组不一样,链表在内存中的存储方式既可以是连续(少见),也可以是不连续(常见),链表是通过指针域的指针链接在内存中各个节点。但是需要注意的是要记得删除6对应的内存区域,否则会出现内存碎片!但是需要注意在反转之前需要定义一个中间变量,否则在反转的时候会找不到下一个要处理的节点!虚拟头节点就是不需要考虑单独处理头节点!

2025-07-02 12:21:50 726

原创 Day7-438.找到字符串中所有字母的异位词-滑动窗口

2.滑动窗口对于这道题要 左右指针同时移动!看一下p中出现的字母的次数(ASCII),可以用哈希表也可以用数组代替。注意:1.返回的是其实索引。3.比较好的思想就是去。

2025-07-01 23:40:45 150

原创 Day6-无重复的最长子串-滑动窗口

重复重复 首先肯定想到哈希表呀,但是哈希表还没有怎么掌握,于是先用数组进行替代,只要计算出现的次数即可!1.结束条件是什么呢?当然是快指针指向数组结束呀。不过本题得考虑一下 怎么判断 不含有重复字符?因为要计算的是区间 所以后面就。2.什么时候缩减左边界呢?

2025-06-30 22:31:33 161

原创 Day5-力扣76最小覆盖子串-滑动窗口 hard

那就是当统计的s字符的个数大于t中的对应字符的个数就要一直去移动左边界!滑动窗口:通过两个指针动态调整窗口的大小,寻找满足条件的最短子字符串。先写到这第一种理解思路,剩下的明天再写,自己根本想不出来啊!边界条件:确保在输入无效时快速返回,避免不必要的计算。,判断子串是否目标,如果判断手段不对,很容易超时。使用两个数组跟踪目标和当前窗口中字符的出现次数。前面还好,这个是看了评论区的答案才理解的。2.定义快慢指针,快指针去进行字符统计,1.遍历完t, 更新当前字符的计数。如何通过巧妙判断频率。

2025-06-30 00:30:18 192

原创 Day4-力扣283-移动零-双指针/盛水最多的容器

复习一下双指针,这个题是一道简单题,然后题目说要把所有的零移动到数组的末尾,要求在原来的数组上进行操作,那要怎么做呢?其实我们就想一下,模拟一下这个过程,首先,创建快慢指针指向第一个元素,这个时候我们就要想,什么时候遍历完呢?那肯定是快指针,先去把数组给遍历完,第二题的话,我觉得应该先搞明白,这个盛最多的水应该怎么去表示?右指针减去左指针的值,然后乘以左右指针对应值的两者之间取最小。我们要不断的去寻找非零的元素,把它和零进行调换不就行了。好了,知道怎么去模拟了,然后我们就想办法用代码去表示。

2025-06-28 17:52:09 141

原创 Day3-力扣34.在排序数组中查找元素的第一个和最后一个位置(二分查找)

有一位大佬解释到说不管别的,就找相等的值就可以了,这样的话我就用两次二分查找不就好了吗?其实到这里就结束了,细心的小伙伴会发现,诶,你这样的话,我只需要再加一个条件变量,去判断找的是左边界还是右边界不就只需要一个函数了吗?同理,当我想去寻找左边界的时候,我就把right=mid+1;如果我想找右边界,当我nums[mid]=target的时候,这个时候我要把left = mid+1;区间的定义就是不变量,那么在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则!加油,然后再用C语言实现一下。

2025-06-26 23:34:51 117

原创 力扣-⻓度最⼩的⼦数组(滑动窗口)

3.什么时候移动终点位置?当窗口内的和小于目标值的时候一直移动!注:如果使用C语言的话就只需要注意输入的地方加一个数组的大小即可。2.什么时候移动起始位置?如果大于目标值就要缩小窗口了!因为C语言不像C++ 可以直接nums.size();1.窗口的条件是什么?本题就是大于等于目标值的一个条件。一次性记录完目前刷过的力扣数组题吧!如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。的 答案更标准一点!

2025-06-25 23:37:25 148

原创 力扣第26题-删除有序数组中的重复项

所以说从下标一开始删除重复元素,用快指针指向一慢指针也指向一。如果说快指针和快指针前面的元素相同的话,那快指针加一,如果说快指针和前面的元素不相同,那把慢指针向前移动一位。然后将快指针指向的值赋给慢指针。对于有序的数组删除重复元素,在删除元素之后,每个元素只会出现一次,并且返回新的长度。那上述操作必须通过原地修改数组的方法,就使用o1的空间复杂度完成,所以说就采取双指针。这样就会跨越好几个重复项从而达不到要求。都会在每次循环中递增。

2025-06-25 23:28:20 191

原创 Day2-数组双指针

双指针的话要记录一个快指针一个慢指针,最终返回的慢指针就是最终的元素数量。快指针的话去遍历整个数组,的题解更容易让人理解!

2025-06-25 23:20:53 116

原创 备战秋招-嵌入式刷力扣Day1-数组二分查找

因为⼀旦有重复元素,使⽤⼆分查找法返 回的元素下标可能不是唯⼀的。这也是使用二分查找的一个前提条件吧!⼆分查找涉及的很多的边界条件,逻辑⽐较简单,但就是写不好。※我的建议是新手一定要区分三种情况,不要把等于号归于大于或者小于中。target,去左区间继续寻 找,⽽寻找区间是左闭右开区间,所以。还是 while(left <= right) ,到底是。这个时候一定要注意你选择的区间是[ ] 还是[ )!target,那么接 下来要查找的左区间结束下标位置就是。是容器, 不是数组(来自代码随想录)

2025-06-25 23:15:14 207

空空如也

空空如也

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

TA关注的人

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