自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 堆and优先队列

是一种抽象的数据类型,而是一种数据结构。是实现的一种方式。实现的方式有很多种,比如数组和链表。但是,这些实现方式只能保证插入操作和删除操作中的一种操作可以在 O(1)的时间复杂度内完成,而另外一个操作则需要在 O(N) 的时间复杂度内完成。而能够使的插入操作在 O(logN) 的时间复杂度内完成,删除操作在 O(logN)的时间复杂度内完成。是一种特别的二叉树,满足以下条件的二叉树,可以称之为1.;2. 每一个节点的值都必须 >=或者

2023-01-29 20:37:13 86

原创 leetcode数据结构入门 | 113.路径和II 450.删除二叉搜索树中的节点 203.二叉搜索树中第k小的元素 173.二叉搜索树迭代器 236. 二叉树的最近公共祖先

指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。根据根节点、左节点和右节点之间的相对顺序,可以进一步将深度优先搜索策略区分为: 先序遍历,中序遍历,后序遍历。左子树的最大节点或右子树的最小节点(找到该节点不是用dfs,直接一致找左节点或者右节点就好)深度优先搜索可以从一个根开始,一直延伸到某个叶,然后回到根,到达另一个分支。代替root,同时从左右子树中删除该节点,返回root。root只有左子树,返回root的左子节点。root只有右子树,返回root的右子节点。

2023-01-27 19:31:57 81

原创 leetcode数据结构入门 | 1249.移除无效的括号 1382.将二叉搜索树变平衡 108.将有序数组转化为高度平衡二叉搜索树 105.前序遍历+中序遍历=二叉树 103.二叉树的锯齿形层次遍

先序遍历中「 左边界+1 , 左边界+1+左子树节点数目」个元素就对应了中序遍历中「 左边界 ,根节点定位-1」的元素。先序遍历中「 左边界+1+左子树节点数目,右边界」个元素就对应了中序遍历中「 根节点+1,右边界」的元素。利用哈希映射,键对值记录[节点的值,节点在数组中的位置];可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。二叉搜索树→中序遍历→数组→二分/递归→平衡二叉搜索树。使用层序遍历,并只保留每层最后一个节点的值。在中遍历中定位根结点;在中序遍历中得到左子树节点数目,

2023-01-26 20:42:49 108

原创 leetCode数据结构入门 | 160.相交链表 82. 删除排序链表中的重复元素 II 24. 两两交换链表中的节点 707.设计链表 25.K个一组翻转链表 143.重排链表

1.因为链表不支持下标访问,所以我们无法随机访问链表中任意位置的元素。利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。需要把链表节点按照 k 个一组分组,所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。翻转一个分组内的子链表,还需要将子链表的头部与上一个子链表连接,以及子链表的尾部与下一个子链表连接。若是,就翻转这部分链表,否则不翻转。相当于两个指针都遍历了m+n的长度,后端对齐了。

2023-01-26 13:37:29 79

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

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

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

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

原创 leetCode数据结构入门day11 | 653.两数之和IV - 输入二叉搜索树 235. 二叉搜索树的最近公共祖先 236. 二叉树的公共祖先

使用两个指针分别指向数组的头尾,当两个指针指向的元素之和小于 kk 时,让左指针右移;当两个指针指向的元素之和大于 kk 时,让右指针左移;当两个指针指向的元素之和等于 kk 时,返回 TrueTrue。最终,当左指针和右指针重合时,树上不存在两个和为 kk 的节点,返回 FalseFalse。235. 二叉搜索树的最近公共祖先。235.二叉树的最近公共祖先。

2023-01-10 14:14:39 56

原创 leetCode数据结构入门day 10 | 226.翻转二叉树 112.路径之和 700.二叉搜索树中的搜索 701. 二叉搜索树中的插入操作 98.验证二叉搜索树

如果当前遍历到的节点 root的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root为根节点的整棵子树的翻转。若 val>root.valval>root.val,递归右子树。(关键,否则会超出时间限制),将这个大问题转化为一个小问题:是否存在从当前节点的子节点到叶子的路径,满足其路径和为。问题关键是,二叉搜索树的插入,总是存在一个不需调整树结构,就能插入新节点的方法。是否有从「根节点」到某个「叶子节点」经过的路径上的节点之和等于目标和。从根节点开始,递归地对树进行遍历,并。

2023-01-10 12:31:36 47

原创 leetCode数据结构入门day 9| 144.二叉树的前序遍历 101. 对称二叉树 102. 二叉树的层次遍历 104.二叉树的最大深度

这样直接递归是不行的,因为数组res没有传递。

2023-01-07 16:04:49 62

原创 leetCode数据结构入门day8 | 203.逆置链表 83. 删除重复元素 20.有效的括号 232.用栈实现队列

标解的代码好简洁QWQ,注意这里指针的后移不是->next,而是直接将一个指针赋值给另一个指针。需要注意的是 n1的下一个节点必须指向 ∅。如果忽略了这一点,链表中可能会产生环。其关键在于反向工作。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?想到了双指针,但是在我的认知里面这应该算三指针了吧。"[", "]" 要进行栈的判空。注意链表开头和结尾的特殊情况。83. 删除重复元素。

2023-01-06 15:16:12 41

原创 leetcode数据结构入门day7 | 141.环形链表 21. 合并两个有序链表 203.移除链表元素

141.环形链表访问次数比较,想到用哈希表,但是不知道ListNode*的数据类型能不能用。事实是可以的。

2023-01-05 15:22:38 41

原创 leetcode数据结构入门day6 | 387,383,242都是次数比较,用哈希表

387.字符串中的第一个唯一的字符想到了用哈希表,但是不知道该怎么用。序列式容器:STL中的部分容器,如:vector、list、deque等,因为其底层为线性序列的数据结构,里面存储的是元素本身关联式容器:里面存储的是结构的键值对(保存映射关系),在数据检索时比序列式容器效率更高。STL总共实现了两种不同结构的关联式式容器:树型结构与哈希结构。

2023-01-04 16:55:03 51

原创 leetcode数据结构入门day5 | 36.有效数独 73. 矩阵置零

36.有效数独可以使用哈希表记录每一行、每一列、每一个小九宫格中,每个数字出现的次数。只需要遍历数独一次,在遍历的过程中更新哈希表中的计数,并判断是否满足有效的数独的条件即可。对于数独的第 i 行第 j 列的单元格,该单元格所在的小九宫格的行数和列数分别为 [i/3]和[j/3]。某个数 x + ’ 0 ’ 就是指将x转变为某个数 x - ’ 0 ’ 就是指将x转变为。

2023-01-04 13:30:45 58

原创 Java | text3,4,5

Java 的输出方式一般有这三种:print、println、printf。它们都是 java.long 包里的 System 类中的方法。

2023-01-02 20:29:00 79

原创 leetcode数据结构入门day4 I 566.重塑矩阵 181.杨辉三角

操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。只有当新旧矩阵容量一致的时候,才能重塑矩阵,否则输出原始矩阵。1.vector数组使用还不是很清晰。3.怎么把旧矩阵填坑进入新矩阵。2.没有理解题目的意思。

2023-01-02 14:45:19 76

原创 leetcode数据结构day3 | 350.两个数组的交集 121.买卖股票的最佳时机

只有当每个元素的键不等于容器中已经存在的任何其他元素的键时,才会插入每个元素(unordered_map中的键是唯一的)。在容器中搜索以k为键的元素,如果找到则返回一个迭代器,否则返回一个迭代器到unordered_map::end(容器末尾的元素)。然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位。:容器可以容纳的最大元素数量。

2023-01-01 16:46:57 58

原创 补充 || 快速排序

因为此处设置的基准数是最左边的数,所以需要让哨兵 j先出动,这一点非常重要。接下来开始哨兵 j 继续向左挪动(再友情提醒,每次必须是哨兵j先出发),哨兵 i 也继续向右挪动的。快速排序是分别从两端开始”探测”的,刚开始的时候让哨兵 i 指向序列的最左边,让哨兵 j 指向序列的最右边。快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。快速排序其实是冒泡排序的一种改进,冒泡排序每次对相邻的两个数进行比较,这显然是一种比较浪费时间的。现在交换哨兵i和哨兵j所指向的元素的值。

2022-12-31 21:15:00 39

原创 leetcode数据结构入门 day2| 1.两数之和 88.合并两个有序数组

严格来说,在此遍历过程中的任意一个时刻,nums1​ 数组中有( m−p1−1 )个元素被放入 nums1​ 的后半部,nums2数组中有(n−p2−1)个元素被放入 nums1的后半部,而在指针 p1的后面,nums1 数组有 (m+n−p1−1)个位置。因此 p1后面的位置永远足够容纳被插入的元素,不会产生 p1​ 的元素被覆盖的情况。(m+n−p1−1)≥(m−p1−1)+(n−p2−1)等价于p2≥−1永远成立,套用快速排序的时间复杂度即可,平均情况为 O((m+n)log⁡(m+n))。

2022-12-31 16:32:59 136

原创 leetcode数据结构入门 day1| 217.存在重复元素 53.最大子序和

注意for循环中数组越界的问题。

2022-12-31 12:38:39 54

原创 WHU数据结构|查找

其中,n是查找表中元素的个数,pi是查找第i个元素的概率,一般地,除特别指出外,均认为每个元素的查找概率相等,即pi=1/n(1≤i≤n),ci是查找到第i个元素所需的关键字比较次数。(4)B+树中所有非叶子结点仅起到索引的作用,即这些结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录。该算法是在有序表R中查找第一个大于等于k的元素(R中可能没有关键字k的元素,也有可能有多个),简单地说就是查找k的插入点,关键字k的插入点定义为将k插入R中使其有序的第一个位置。

2022-12-29 21:59:33 390

原创 WHU数据结构 | 排序

排序:整理表中的元素,使之按关键字递增或递减有序排列。本章仅讨论递增排序的情况,在默认情况下均指递增排序。排序的稳定性:当待排序元素的关键字均不相同时,排序的结果是唯一的,否则排序的结果不一定唯一。如果待排序的表中,存在有多个关键字相同的元素,经过排序后这些具有相同关键字的元素之间的相对次序保持不变,则称这种排序方法是稳定的。反之,若具有相同关键字的元素之间的相对次序发生变化,则称这种排序方法是不稳定的。排序数据的组织:以顺序表作为排序表的存储结构(除基数排序采用单链表外)。

2022-12-27 22:16:22 183

原创 Git调试中的问题 |无法在文件夹中打卡Git Bash,添加文件不成功,添加用户名和地址

第三学期实训

2022-07-05 17:22:12 246 1

空空如也

空空如也

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

TA关注的人

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