自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang中map数据结构字段解析

hmap其中最重要的就是,它指向了一个包含多个结构为bmap(桶)的bucket数组*,bucket的底层采用链表将bmap链接起来。[]bmap是一个底层数组,我们把它称之为 桶(哈希桶) ,暂时可以理解为用于存放map键值对以及其他的数据元素因为哈希冲突的原因,所以一般[]bmap数组只存放一个指针,该指针指向一个链表用于存放键值对。

2024-03-15 23:45:33 939

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

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

2024-03-12 08:38:47 681 1

原创 738. 单调递增的数字

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

2023-11-30 16:22:39 429

原创 763. 划分字母区间

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

2023-11-29 15:42:07 431

原创 860. 柠檬水找零

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

2023-11-29 15:23:06 391

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

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

2023-11-26 22:00:52 668

原创 55.跳跃游戏

【代码】55.跳跃游戏。

2023-11-25 19:28:23 519

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

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

2023-11-25 19:07:54 416

原创 53.最大子数组和

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

2023-11-24 23:00:26 816

原创 376.摆动序列

【代码】376.摆动序列。

2023-11-24 22:49:22 376

原创 455.分发饼干

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

2023-11-24 22:21:39 509

原创 回溯总结

【代码】回溯总结。

2023-11-23 21:58:32 358

原创 46.全排列

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

2023-11-22 17:51:17 36

原创 491.递增子序列

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

2023-11-22 17:41:43 45

原创 90.子集II

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

2023-11-22 17:10:12 179

原创 78.子集

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

2023-11-22 16:41:53 30

原创 131.分割回文串

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

2023-11-22 16:01:12 52

原创 40.组合总和 II

太抽象了 建议看题解。

2023-11-22 00:33:52 110

原创 39.组合总和

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

2023-11-22 00:13:57 108

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

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

2023-11-20 23:00:01 556

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

原创 第77题. 组合

【代码】第77题. 组合。

2023-11-18 01:34:54 186

原创 669.修剪二叉树

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

2023-11-16 23:01:51 582

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

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

2023-11-15 14:39:22 40

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

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

2023-11-15 14:37:30 40

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

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

2023-11-15 14:32:27 49

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

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

2023-11-14 21:11:30 103

原创 501. 二叉搜索树中的众数

频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。如果 频率count 等于 maxCount(最大频率),当然要把这个元素加入到结果集中(以下代码为result数组)遍历有序数组的元素出现频率,从头遍历,那么一定是相邻两个元素作比较,然后就把出现频率最高的元素输出就可以了。而且初始化的时候pre = NULL,这样当pre为NULL时候,我们就知道这是比较的第一个元素。二叉搜索树,必然是有序的。

2023-11-14 19:18:35 39

原创 530.二叉搜索树的最小绝对

因为是二叉搜索树,根据他的特性,直接递归中序遍历获取所有元素,成为一个有序数组。因为是有序数组,所以其实求相邻两个值的差值是不是最小值即可。然后在有序数值内进行双指针递归遍历即可获得最小差值。

2023-11-14 18:55:29 62

原创 98. 验证二叉搜索树

有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。然后只要比较一下,这个数组是否是有序的,注意二叉搜索树中不能有重复元素。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。可以递归中序遍历将二叉搜索树转变成一个数组。

2023-11-13 22:43:02 145

原创 700. 二叉搜索树中的搜索

如果大于则将root = root ->left ,如果小于则root = root ->right即可。利用这个特性,只需要判断结点的val是否等于题目给定的val,如果等于则返回该结点。这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。给定的就是一个二叉搜索树。

2023-11-13 21:42:44 98

原创 617.合并二叉树

在root1的树上进行修改,root1的结点的val值应为root1 ->val + root2 ->val。将root1 和roo2的左右子树分别传入 进行递归(此时递归内使用的应是子结点)先判断两棵树那颗是空的,如果其中一棵树空,则返回另一颗树。

2023-11-13 21:33:38 57

原创 654. 最大二叉树

【代码】654. 最大二叉树。

2023-11-13 21:27:00 75

原创 106. 从中序与后序遍历序列构造二叉树

通过后序找到树的根节点,然后再通过中序进行左右子树确认,切割。然后通过递归不断的进行寻找与切割,直到遇到叶子结点为止。

2023-11-12 12:12:52 69

原创 113.路径总和II

不同,该题是要你找出所有相同的路径,那么此时就要注意存储,递归和回溯了。

2023-11-12 11:46:13 115

原创 112. 路径总和

遍历一个结点累加很麻烦,所以选择了递减。使用递归前序遍历即可。

2023-11-12 11:17:51 65

原创 513. 找树左下角的值

此时直接使用层序遍历,记录最后一层最左边的值就可以了 也就是最后一层的que.front();那么如何判断是最后一层呢?其实并不需要进行判断,只需要在进行每层的层序遍历时,将result = que.front()也就是每层的最左边一个元素即可。找出二叉树的 最底层 最左边 节点的值。

2023-11-12 10:20:17 67

原创 (层次遍历)111. 二叉树的最小深度

最先遇到叶子节点就代表是最小的深度,直接返回depth即可。直接层序遍历,遍历一层记录最小深度的遍历depth++

2023-11-11 22:22:24 227

原创 (层次遍历)104. 二叉树的最大深度

使用层序遍历模板,遍历每一层 hight+1 返回hight即可。

2023-11-11 22:05:23 240

原创 116. 填充每个节点的下一个右侧节点指针

如果不止一个结点,那么就让cur指向后一个结点元素,因为cur存储的是已经从队列中弹出的结点元素,那么cur的后一个元素就是弹出后que的头结点元素 cur ->next = que.front();只需要在遍历每层的结点的时,获取到该结点元素Node* cur = que.front(),再从que队列中将该结点弹出que.pop()之后进行判断,如果是只有一个结点,那么直接让这个结点指向NULL if(i = size - 1) cur->next = NULL;

2023-11-11 21:56:28 133

空空如也

空空如也

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

TA关注的人

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