leetcode数据结构
文章平均质量分 68
Bobo080511
这个作者很懒,什么都没留下…
展开
-
堆and优先队列
是一种抽象的数据类型,而是一种数据结构。是实现的一种方式。实现的方式有很多种,比如数组和链表。但是,这些实现方式只能保证插入操作和删除操作中的一种操作可以在 O(1)的时间复杂度内完成,而另外一个操作则需要在 O(N) 的时间复杂度内完成。而能够使的插入操作在 O(logN) 的时间复杂度内完成,删除操作在 O(logN)的时间复杂度内完成。是一种特别的二叉树,满足以下条件的二叉树,可以称之为1.;2. 每一个节点的值都必须 >=或者原创 2023-01-29 20:37:13 · 138 阅读 · 0 评论 -
leetcode数据结构入门 | 113.路径和II 450.删除二叉搜索树中的节点 203.二叉搜索树中第k小的元素 173.二叉搜索树迭代器 236. 二叉树的最近公共祖先
指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。根据根节点、左节点和右节点之间的相对顺序,可以进一步将深度优先搜索策略区分为: 先序遍历,中序遍历,后序遍历。左子树的最大节点或右子树的最小节点(找到该节点不是用dfs,直接一致找左节点或者右节点就好)深度优先搜索可以从一个根开始,一直延伸到某个叶,然后回到根,到达另一个分支。代替root,同时从左右子树中删除该节点,返回root。root只有左子树,返回root的左子节点。root只有右子树,返回root的右子节点。原创 2023-01-27 19:31:57 · 129 阅读 · 0 评论 -
leetcode数据结构入门 | 1249.移除无效的括号 1382.将二叉搜索树变平衡 108.将有序数组转化为高度平衡二叉搜索树 105.前序遍历+中序遍历=二叉树 103.二叉树的锯齿形层次遍
先序遍历中「 左边界+1 , 左边界+1+左子树节点数目」个元素就对应了中序遍历中「 左边界 ,根节点定位-1」的元素。先序遍历中「 左边界+1+左子树节点数目,右边界」个元素就对应了中序遍历中「 根节点+1,右边界」的元素。利用哈希映射,键对值记录[节点的值,节点在数组中的位置];可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。二叉搜索树→中序遍历→数组→二分/递归→平衡二叉搜索树。使用层序遍历,并只保留每层最后一个节点的值。在中遍历中定位根结点;在中序遍历中得到左子树节点数目,原创 2023-01-26 20:42:49 · 157 阅读 · 0 评论 -
leetCode数据结构入门 | 160.相交链表 82. 删除排序链表中的重复元素 II 24. 两两交换链表中的节点 707.设计链表 25.K个一组翻转链表 143.重排链表
1.因为链表不支持下标访问,所以我们无法随机访问链表中任意位置的元素。利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。需要把链表节点按照 k 个一组分组,所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。翻转一个分组内的子链表,还需要将子链表的头部与上一个子链表连接,以及子链表的尾部与下一个子链表连接。若是,就翻转这部分链表,否则不翻转。相当于两个指针都遍历了m+n的长度,后端对齐了。原创 2023-01-26 13:37:29 · 126 阅读 · 0 评论 -
leetCode数据结构基础 | 415.字符串相加 409.最长回文串 334.递增的三元子序列 238. 除自身以外数组的乘积 560.和为k的子数组 290.单词规律 763.划分字母区间
建立哈希表 mp,以和为键,出现次数为对应的值,记录 pre[i] 出现的次数,从左往右边更新 mp边计算答案,那么以 i 结尾的答案 mp[pre[i]−k]即可在 O(1) 时间内得到。知道 [j,i]子数组的和,就能 O(1)推出 [j−1,i]的和,枚举下标 j 的时候已经能 O(1) 求出 [j,i] 的子数组之和。定义 pre[i]]为 [0..i]里所有数的和,则 pre[i] 可以由 pre[i−1] 递推而来即:pre[i]=pre[i−1]+nums[i]。指的是输入数组的大小。原创 2023-01-17 17:07:14 · 68 阅读 · 0 评论 -
leetCode数据结构基础 day3 | 119.杨辉三角II 48.旋转图像 59.螺旋矩阵II 240.搜索二维矩阵II 435.无重叠区间
如果 matrix[x,y]target,由于每一列的元素都是升序排列的,那么在当前的搜索矩阵中,所有位于第 y列的元素都是严格大于 target的,因此我们可以将它们全部忽略,即将 y减少 1;由于每一次原地交换四个位置,当 n 为偶数时,我们需要枚举 n^2/4=(n/2)×(n/2) 个位置;原创 2023-01-15 09:50:34 · 94 阅读 · 0 评论 -
leetCode数据结构基础 | 感觉最近不在状态QWQ。慢慢来吧。75.颜色分类 705.设计哈希集合 706.设计哈希映射
75.1.可以统计出数组中 0,1,2 的个数,再根据它们的数量,重写整个数组。2.对数组进行两次遍历。指针ptr,在第一次遍历中,我们将数组中所有的 0 交换到数组的头部。在第二次遍历中,我们将数组中所有的 1交换到头部的 0 之后。此时,所有的 2 都出现在数组的尾部。3.对数组进行一次遍历,用指针 p0 来交换 0,p1来交换 1,初始值都为 0。如果找到了 1,那么将其与 nums[p1]进行交换,并将 p1 向后移动一个位置,原创 2023-01-12 10:46:29 · 65 阅读 · 0 评论 -
leetCode数据结构基础 day1 | 136.只出现一次的数字 169.多数元素 15.三数之和
依然还是在数组中找到 abc 使得a + b +c =0,这里相当于 a = nums[i] b = nums[left] c = nums[right]。如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。3.异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。1.任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。原创 2023-01-11 13:16:30 · 57 阅读 · 0 评论 -
leetCode数据结构入门day11 | 653.两数之和IV - 输入二叉搜索树 235. 二叉搜索树的最近公共祖先 236. 二叉树的公共祖先
使用两个指针分别指向数组的头尾,当两个指针指向的元素之和小于 kk 时,让左指针右移;当两个指针指向的元素之和大于 kk 时,让右指针左移;当两个指针指向的元素之和等于 kk 时,返回 TrueTrue。最终,当左指针和右指针重合时,树上不存在两个和为 kk 的节点,返回 FalseFalse。235. 二叉搜索树的最近公共祖先。235.二叉树的最近公共祖先。原创 2023-01-10 14:14:39 · 70 阅读 · 0 评论 -
leetCode数据结构入门day 10 | 226.翻转二叉树 112.路径之和 700.二叉搜索树中的搜索 701. 二叉搜索树中的插入操作 98.验证二叉搜索树
如果当前遍历到的节点 root的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root为根节点的整棵子树的翻转。若 val>root.valval>root.val,递归右子树。(关键,否则会超出时间限制),将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为。问题关键是,二叉搜索树的插入,总是存在一个不需调整树结构,就能插入新节点的方法。是否有从「根节点」到某个「叶子节点」经过的路径上的节点之和等于目标和。从根节点开始,递归地对树进行遍历,并。原创 2023-01-10 12:31:36 · 152 阅读 · 0 评论 -
leetCode数据结构入门day 9| 144.二叉树的前序遍历 101. 对称二叉树 102. 二叉树的层次遍历 104.二叉树的最大深度
这样直接递归是不行的,因为数组res没有传递。原创 2023-01-07 16:04:49 · 77 阅读 · 0 评论 -
leetCode数据结构入门day8 | 203.逆置链表 83. 删除重复元素 20.有效的括号 232.用栈实现队列
标解的代码好简洁QWQ,注意这里指针的后移不是->next,而是直接将一个指针赋值给另一个指针。需要注意的是 n1的下一个节点必须指向 ∅。如果忽略了这一点,链表中可能会产生环。其关键在于反向工作。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?想到了双指针,但是在我的认知里面这应该算三指针了吧。"[", "]" 要进行栈的判空。注意链表开头和结尾的特殊情况。83. 删除重复元素。原创 2023-01-06 15:16:12 · 67 阅读 · 0 评论 -
leetcode数据结构入门day7 | 141.环形链表 21. 合并两个有序链表 203.移除链表元素
141.环形链表访问次数比较,想到用哈希表,但是不知道ListNode*的数据类型能不能用。事实是可以的。原创 2023-01-05 15:22:38 · 67 阅读 · 0 评论 -
leetcode数据结构入门day6 | 387,383,242都是次数比较,用哈希表
387.字符串中的第一个唯一的字符想到了用哈希表,但是不知道该怎么用。序列式容器:STL中的部分容器,如:vector、list、deque等,因为其底层为线性序列的数据结构,里面存储的是元素本身关联式容器:里面存储的是结构的键值对(保存映射关系),在数据检索时比序列式容器效率更高。STL总共实现了两种不同结构的关联式式容器:树型结构与哈希结构。原创 2023-01-04 16:55:03 · 83 阅读 · 0 评论 -
leetcode数据结构入门day5 | 36.有效数独 73. 矩阵置零
36.有效数独可以使用哈希表记录每一行、每一列、每一个小九宫格中,每个数字出现的次数。只需要遍历数独一次,在遍历的过程中更新哈希表中的计数,并判断是否满足有效的数独的条件即可。对于数独的第 i 行第 j 列的单元格,该单元格所在的小九宫格的行数和列数分别为 [i/3]和[j/3]。某个数 x + ’ 0 ’ 就是指将x转变为某个数 x - ’ 0 ’ 就是指将x转变为。原创 2023-01-04 13:30:45 · 184 阅读 · 0 评论 -
leetcode数据结构入门day4 I 566.重塑矩阵 181.杨辉三角
操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。只有当新旧矩阵容量一致的时候,才能重塑矩阵,否则输出原始矩阵。1.vector数组使用还不是很清晰。3.怎么把旧矩阵填坑进入新矩阵。2.没有理解题目的意思。原创 2023-01-02 14:45:19 · 138 阅读 · 0 评论 -
leetcode数据结构day3 | 350.两个数组的交集 121.买卖股票的最佳时机
只有当每个元素的键不等于容器中已经存在的任何其他元素的键时,才会插入每个元素(unordered_map中的键是唯一的)。在容器中搜索以k为键的元素,如果找到则返回一个迭代器,否则返回一个迭代器到unordered_map::end(容器末尾的元素)。然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位。:容器可以容纳的最大元素数量。原创 2023-01-01 16:46:57 · 78 阅读 · 0 评论