- 博客(120)
- 收藏
- 关注
原创 最长回文子串(双指针中心扩展法)
利用这个思路,可以使用两个指针,不断的根据中心点,左右两边同时向外扩展,相等则继续扩展。最长回文子串如果存在,那么一定有个中心点向两边扩展,左右边界相等,才能组成回文子串。不相等则代表结束了回文子串的遍历,此时比较长度是否为最长子串。因为存在奇数和偶数回文串之分,所以两种情况都要考虑到。是则更新,最终返回res即可。
2025-03-18 16:12:44
217
原创 移除链表元素(虚拟头节点)
如果虚拟头节点指向的节点的元素和Val相等,则代表遇见需要移除的元素了,直接移除。最终返回虚拟头节点指向的下一个节点,也就是原链表(此时为移除元素完成的链表)创建一个新的虚拟头节点,值为0,指针指向题目给的链表头节点。和链表相关的题目都可使用虚拟头节点virtual来解决。如果不是,则继续遍历链表。从虚拟头节点开始遍历,
2025-03-18 14:32:20
93
原创 长度最小的子数组(滑动窗口应用)
在滑动窗口内的值大于或等于target时,就可以进行判断了,此时从左侧开始缩小滑动窗口,直到小于target,就可以得出最小的滑动窗口(子数组)的长度了。根据题意可知,是求最小子数组,那么就可以思考是否可以应用到滑动窗口这个技巧。
2025-03-18 14:28:31
162
原创 移除元素(快慢指针)
快指针val等于nums[fast]时自增,而不等于时,将快指针指向的值赋予慢指针指向的值,之后快慢指针++之后返回slow,此时slow就是非val的值的数量,而数组中也就是slow个非val的值。由题意可知需要移除等于val的值,并且将不等于val的值顺序前移,但是返回顺序不重要。此时思考使用快慢指针即可。
2025-03-17 17:56:57
208
原创 20. 有效的括号
每次将给到的括号和栈顶进行匹配,成功则弹出栈顶元素,不成功则返回false。2.右括号匹配时,和栈顶元素的左括号不匹配。2.右括号匹配完后,栈内还有剩余的左括号。1.右括号匹配左括号时时栈为空。
2025-01-16 17:04:18
125
原创 151.反转字符串中的单词
2.因为不确定相邻在子字符串之间有多少空格,以及字符串开头和结尾有多少空格,所以先对字符串进行去空格处理.去掉多余空字符、前导空字符、末尾空字符后,只需要将整个字符串反转,然后反转相应子字符串就可以,空间复杂度为O(1),代码如下。1.可以使用额外空间,先对字符串进行空格处理,去掉多余空字符、前导空字符、末尾空字符。使用双指针检测空格,然后将子字符串赋值进新空间内即可,但是这样用了多的额外空间。
2025-01-06 16:54:23
221
原创 707.设计链表
首先是定义一个MyLinkedList的结构用来管理链表,里面有两个元素一个是*node类型的virhead,虚拟头节点virhead.next指向的是链表的实际头节点。Get函数内,首先需要判断索引是否有效,大于链表长度或小于0(当前链表下标从0开始)都是无效的。再定义一个node类型的结构体,表示节点,里面有一个val和一个next。直接返回一个MyLinkedList类型的node节点,val值为0。直接遍历链表直至目标索引,返回当前索引的val即可。
2024-09-20 17:39:54
189
原创 203.移除链表元素
判断当前节点指向的下一个节点的val值是否为给定Val,如果是,则将当前节点的next指向下一个节点的next,也就是virtual.Next = virtual.Nexr.Next。根据题意创建出一个虚拟头节点,Next指向当前链表的头节点。如果不是,则将当前节点的next赋值给虚拟头节点。遍历该链表,直至末尾。
2024-09-20 12:42:38
238
原创 Goland滑动窗口
维护一个最小的滑动窗口,需要判断这个窗口的sum值是否大于给定的target,如果不大于则一直往数组右方元素累加至大于或等于target值即可。大于或等于时,则需要得到当前滑动窗口的长度,判断是不是长度最小的滑动窗口,如果是则将该窗口长度赋值给result变量用于返回。如果不是则需要减掉滑动窗口最左侧的元素,代表滑动窗口最左则的元素为i,则i++代表了滑动窗口最左则元素减少。减小掉了窗口最左则的元素,那么滑动窗口总值sum也要减去元素的值,所以也就是sum -=nums[i]如果不是则返回result。
2024-09-19 22:01:02
399
1
原创 Golang中map数据结构字段解析
hmap其中最重要的就是,它指向了一个包含多个结构为bmap(桶)的bucket数组*,bucket的底层采用链表将bmap链接起来。[]bmap是一个底层数组,我们把它称之为 桶(哈希桶) ,暂时可以理解为用于存放map键值对以及其他的数据元素因为哈希冲突的原因,所以一般[]bmap数组只存放一个指针,该指针指向一个链表用于存放键值对。
2024-03-15 23:45:33
1097
原创 1005. K 次取反后最大化的数组和
思路:先把数组排序好,然后直接从下标0(最小的负数)开始反转,那么接下来有两种情况:1.负数反转完了,k还有剩余。此时因为nums内全部都是正数,所以我们只需要将nums再次排序,然后反复对nums[0]进行k此反转即可。2.负数还没反转完,k没有剩余了。此时直接遍历nums每个元素进行累得出和即可。
2023-11-26 22:00:52
696
原创 122.买卖股票的最佳时机 II
题目要求的是返回最大利润。那么只需要把一天和前一天的利润值进行判断,只要是正数利润就相加就可以了,再返回,那就是最大的利润值。又因为需要和前一天判断 所以第一天是肯定没有利润的,下标就从1开始。
2023-11-25 19:07:54
447
原创 491.递增子序列
如果子序列为空且nums[i]的值小于序列的最后一个值(不满足要求),或者nums[i]在uset中出现过,那么就跳过本层的该元素,因为该元素在之前使用过。遍历所有结点,并且遍历一个就将path给push进result中,因为每增加一个结点就代表有一个新的子序列。将每层使用过的元素添加进uset中,代表本层后面不能再使用相同元素。要考虑去重 所以使用unorderedset uset。
2023-11-22 17:41:43
73
原创 78.子集
然后就是for循环的横向遍历,每次将结点的值push进path中,然后进入一次递归就push进一次result中,因为要将所有可能的子集都收集。当startIndex这个枚举遍历大于nums.size()的数组长度时,则代表终止递归。退出回溯时需要将path容器的元素pop_back。
2023-11-22 16:41:53
56
原创 216. 组合总和 III
原题链接:[216. 组合总和 III(https://leetcode.cn/problems/combination-sum-iii/submissions/483547922/)但是需要在进行一次判断,如果sum等于题目给定的targetSum,则代表是需要的值 将path给push_back进result中即可。终止条件方面,依旧是path.size() == k 时,就终止。回溯时要注意,sum要进行 -i,并把path给pop_back。
2023-11-20 22:44:37
347
原创 450. 删除二叉搜索树中的节点
第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点。第一种情况:没找到删除的节点,遍历到空节点直接返回了。
2023-11-15 14:37:30
60
原创 701. 二叉搜索树中的插入操作
因为是二叉搜索树,我们可以利用这个特性来确定val到底是在那一边的子树,而不是全部遍历二叉搜索树。直接使用递归,如果查询到root为NULL,则直接创建新结点即可。
2023-11-15 14:32:27
65
原创 501. 二叉搜索树中的众数
频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。如果 频率count 等于 maxCount(最大频率),当然要把这个元素加入到结果集中(以下代码为result数组)遍历有序数组的元素出现频率,从头遍历,那么一定是相邻两个元素作比较,然后就把出现频率最高的元素输出就可以了。而且初始化的时候pre = NULL,这样当pre为NULL时候,我们就知道这是比较的第一个元素。二叉搜索树,必然是有序的。
2023-11-14 19:18:35
61
原创 530.二叉搜索树的最小绝对
因为是二叉搜索树,根据他的特性,直接递归中序遍历获取所有元素,成为一个有序数组。因为是有序数组,所以其实求相邻两个值的差值是不是最小值即可。然后在有序数值内进行双指针递归遍历即可获得最小差值。
2023-11-14 18:55:29
89
原创 98. 验证二叉搜索树
有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。然后只要比较一下,这个数组是否是有序的,注意二叉搜索树中不能有重复元素。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。可以递归中序遍历将二叉搜索树转变成一个数组。
2023-11-13 22:43:02
165
原创 700. 二叉搜索树中的搜索
如果大于则将root = root ->left ,如果小于则root = root ->right即可。利用这个特性,只需要判断结点的val是否等于题目给定的val,如果等于则返回该结点。这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。给定的就是一个二叉搜索树。
2023-11-13 21:42:44
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人