- 博客(111)
- 收藏
- 关注
原创 Golang中map数据结构字段解析
hmap其中最重要的就是,它指向了一个包含多个结构为bmap(桶)的bucket数组*,bucket的底层采用链表将bmap链接起来。[]bmap是一个底层数组,我们把它称之为 桶(哈希桶) ,暂时可以理解为用于存放map键值对以及其他的数据元素因为哈希冲突的原因,所以一般[]bmap数组只存放一个指针,该指针指向一个链表用于存放键值对。
2024-03-15 23:45:33 939
原创 1005. K 次取反后最大化的数组和
思路:先把数组排序好,然后直接从下标0(最小的负数)开始反转,那么接下来有两种情况:1.负数反转完了,k还有剩余。此时因为nums内全部都是正数,所以我们只需要将nums再次排序,然后反复对nums[0]进行k此反转即可。2.负数还没反转完,k没有剩余了。此时直接遍历nums每个元素进行累得出和即可。
2023-11-26 22:00:52 668
原创 122.买卖股票的最佳时机 II
题目要求的是返回最大利润。那么只需要把一天和前一天的利润值进行判断,只要是正数利润就相加就可以了,再返回,那就是最大的利润值。又因为需要和前一天判断 所以第一天是肯定没有利润的,下标就从1开始。
2023-11-25 19:07:54 416
原创 491.递增子序列
如果子序列为空且nums[i]的值小于序列的最后一个值(不满足要求),或者nums[i]在uset中出现过,那么就跳过本层的该元素,因为该元素在之前使用过。遍历所有结点,并且遍历一个就将path给push进result中,因为每增加一个结点就代表有一个新的子序列。将每层使用过的元素添加进uset中,代表本层后面不能再使用相同元素。要考虑去重 所以使用unorderedset uset。
2023-11-22 17:41:43 45
原创 78.子集
然后就是for循环的横向遍历,每次将结点的值push进path中,然后进入一次递归就push进一次result中,因为要将所有可能的子集都收集。当startIndex这个枚举遍历大于nums.size()的数组长度时,则代表终止递归。退出回溯时需要将path容器的元素pop_back。
2023-11-22 16:41:53 30
原创 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
原创 450. 删除二叉搜索树中的节点
第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点。第一种情况:没找到删除的节点,遍历到空节点直接返回了。
2023-11-15 14:37:30 40
原创 701. 二叉搜索树中的插入操作
因为是二叉搜索树,我们可以利用这个特性来确定val到底是在那一边的子树,而不是全部遍历二叉搜索树。直接使用递归,如果查询到root为NULL,则直接创建新结点即可。
2023-11-15 14:32:27 49
原创 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
原创 106. 从中序与后序遍历序列构造二叉树
通过后序找到树的根节点,然后再通过中序进行左右子树确认,切割。然后通过递归不断的进行寻找与切割,直到遇到叶子结点为止。
2023-11-12 12:12:52 69
原创 513. 找树左下角的值
此时直接使用层序遍历,记录最后一层最左边的值就可以了 也就是最后一层的que.front();那么如何判断是最后一层呢?其实并不需要进行判断,只需要在进行每层的层序遍历时,将result = que.front()也就是每层的最左边一个元素即可。找出二叉树的 最底层 最左边 节点的值。
2023-11-12 10:20:17 67
原创 (层次遍历)111. 二叉树的最小深度
最先遇到叶子节点就代表是最小的深度,直接返回depth即可。直接层序遍历,遍历一层记录最小深度的遍历depth++
2023-11-11 22:22:24 227
原创 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关注的人