自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 (golang)切片何时会创建新切片或影响原切片

对切片的操作何时创建新切片,或是影响到原数组

2024-03-12 08:38:47 797 2

原创 738. 单调递增的数字

【代码】738. 单调递增的数字。

2023-11-30 16:22:39 490

原创 763. 划分字母区间

【代码】763. 划分字母区间。

2023-11-29 15:42:07 482

原创 860. 柠檬水找零

【代码】860. 柠檬水找零。

2023-11-29 15:23:06 423

原创 1005. K 次取反后最大化的数组和

思路:先把数组排序好,然后直接从下标0(最小的负数)开始反转,那么接下来有两种情况:1.负数反转完了,k还有剩余。此时因为nums内全部都是正数,所以我们只需要将nums再次排序,然后反复对nums[0]进行k此反转即可。2.负数还没反转完,k没有剩余了。此时直接遍历nums每个元素进行累得出和即可。

2023-11-26 22:00:52 696

原创 55.跳跃游戏

【代码】55.跳跃游戏。

2023-11-25 19:28:23 544

原创 122.买卖股票的最佳时机 II

题目要求的是返回最大利润。那么只需要把一天和前一天的利润值进行判断,只要是正数利润就相加就可以了,再返回,那就是最大的利润值。又因为需要和前一天判断 所以第一天是肯定没有利润的,下标就从1开始。

2023-11-25 19:07:54 447

原创 53.最大子数组和

只需要判断当前和小于负数 如果小于则舍弃掉子序列即可,子序列开头从下一个下标位置开始。

2023-11-24 23:00:26 842

原创 376.摆动序列

【代码】376.摆动序列。

2023-11-24 22:49:22 402

原创 455.分发饼干

先使用大饼干喂饱大胃口的,再到剩余的里面用大饼干喂剩下大胃口的 ,直到全部满足或者喂不了了为止。

2023-11-24 22:21:39 537

原创 回溯总结

【代码】回溯总结。

2023-11-23 21:58:32 381

原创 46.全排列

但是依旧是不允许有重复元素使用,所以依旧是需要进行去重。主要是和组合的区别,排列是可以从头使用元素。

2023-11-22 17:51:17 58

原创 491.递增子序列

如果子序列为空且nums[i]的值小于序列的最后一个值(不满足要求),或者nums[i]在uset中出现过,那么就跳过本层的该元素,因为该元素在之前使用过。遍历所有结点,并且遍历一个就将path给push进result中,因为每增加一个结点就代表有一个新的子序列。将每层使用过的元素添加进uset中,代表本层后面不能再使用相同元素。要考虑去重 所以使用unorderedset uset。

2023-11-22 17:41:43 73

原创 90.子集II

重点就是去重 也就是同层的去重操作。

2023-11-22 17:10:12 209

原创 78.子集

然后就是for循环的横向遍历,每次将结点的值push进path中,然后进入一次递归就push进一次result中,因为要将所有可能的子集都收集。当startIndex这个枚举遍历大于nums.size()的数组长度时,则代表终止递归。退出回溯时需要将path容器的元素pop_back。

2023-11-22 16:41:53 56

原创 131.分割回文串

【代码】131.分割回文串。

2023-11-22 16:01:12 78

原创 40.组合总和 II

太抽象了 建议看题解。

2023-11-22 00:33:52 133

原创 39.组合总和

依旧是遍历整棵树,此时终止条件变为总和sum大于给定的target值 或者等于target 就进行回溯。

2023-11-22 00:13:57 136

原创 17. 电话号码的字母组合

【代码】17. 电话号码的字母组合。

2023-11-20 23:00:01 576

原创 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

原创 第77题. 组合

【代码】第77题. 组合。

2023-11-18 01:34:54 214

原创 669.修剪二叉树

【代码】669.修剪二叉树。

2023-11-16 23:01:51 617

原创 235. 二叉搜索树的最近公共祖先

【代码】235. 二叉搜索树的最近公共祖先。

2023-11-15 14:39:22 66

原创 450. 删除二叉搜索树中的节点

第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点。第一种情况:没找到删除的节点,遍历到空节点直接返回了。

2023-11-15 14:37:30 60

原创 701. 二叉搜索树中的插入操作

因为是二叉搜索树,我们可以利用这个特性来确定val到底是在那一边的子树,而不是全部遍历二叉搜索树。直接使用递归,如果查询到root为NULL,则直接创建新结点即可。

2023-11-15 14:32:27 65

原创 236. 二叉树的最近公共祖先

【代码】236. 二叉树的最近公共祖先。

2023-11-14 21:11:30 124

原创 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关注的人

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