- 博客(86)
- 收藏
- 关注
原创 C语言:基础知识
在项⽬中就可以添加源⽂件和头⽂件。C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键 字。• 关键字都有特殊的意义,是保留给C语⾔使⽤的• 程序员⾃⼰在创建标识符的时候是不能和关键字重复的• 关键字也是不能⾃⼰创建的。
2023-10-28 20:04:23 2849 103
原创 DS高阶:跳表
skiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度是O(N)。
2024-05-16 00:25:36 1107 124
原创 C++:哈希表和unordered系列容器的封装
在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同(哈希表)
2024-05-06 18:47:00 2075 136
原创 DS高阶:图论基础知识
图是比线性表和树更为复杂且抽象的结构,和以往所学结构不同的是图是一种表示型的结构,也就是说他更关注的是元素与元素之间的关系。
2024-05-01 00:51:11 1471 119
原创 DS进阶:并查集
在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-findset)。
2024-04-27 00:27:52 1204 127
原创 DS进阶:AVL树和红黑树
二叉搜索树(BST)虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。 而AVL树的平衡太过严格,导致维护效率很低,因此红黑树应运而生!!
2024-04-24 00:00:26 1906 138
原创 算法思想总结:栈
我们平时看到的 1+2*(3-4*5)+6/7 叫做中缀表达式,平时我们习惯用这个计算的原因是我们可以整体地去看到这个表达式并且清楚地知道各个运算符的优先级,但是计算机并不一定知道,因为他总是从前往后去遍历这个表达式。
2024-04-22 16:01:46 2372 103
原创 C++:map和set的使用
在STL中,总共实现了两种类型的关联性容器:树形结构与哈希结构,树型结构的关联式容器主要有四种:map、set、multimap、multiset。 这四种容器的共同点是:底层使用的是平衡搜索树(即红黑树)去实现的,容器中的元素是一个有序的序列。
2024-04-20 00:10:58 1846 125
原创 二叉树经典OJ题(2)
1、二叉搜索树涉及到升序的情况,一般是根中序遍历建立联系2、前序和中序构建二叉树,以及中序和后序构建二叉树,本质上是利用一个序列找根,另一个序列去划分问题。同时我们会发现其实后序遍历如果反着来的话大多数情况下可以转化成类似前序遍历,比如4、5题和7、8题,都可以用前序遍历的思路去解决后序遍历。3、非递归实现二叉树的前中后序遍历,本质上是将问题拆分为1、访问左路节点 2、访问左路节点的右子树。需要用一个辅助栈去帮助我们记录节点。
2024-04-15 00:47:19 2236 128
原创 算法思想总结:分治思想
1,快速排序本身相当于一个前序遍历,最好的时间复杂度是NlogN 最差的时间复杂度是N^2 ,最坏的情况是出现在(1)以最左侧或最右侧为基准值的时候,凑巧又接近有序(2)大量重复元素。为了解决这个问题衍生出了优化思路:三组划分+随机取key。并且这种方式还可以解决top-k问题,并且时间复杂度是o(N)比堆排序还优秀,我们称之为快速选择算法。2,归并排序的本质就是将问题划分成无数个合并两个有序数组的子问题。是一个典型的后序遍历,时间复杂度是NlogN.我们发现他有一个特点就是:在归并之前,两个数组是有序
2024-04-13 00:20:33 1612 123
原创 DFS:floodfill算法解决矩阵联通块问题
floodfill,翻译为洪水灌溉,而floodfill算法本质上是为了解决在矩阵中性质相同的联通块问题。
2024-04-07 00:50:47 1447 106
原创 DFS:深搜+回溯+剪枝解决矩阵搜索问题
1、矩阵搜索问题经常要用到向量,也就是我们可以通过dx和dy来帮助我们定义方向2、矩阵搜索要确保走过的位置不再走过,所以此时有两个策略:(1)标记数组,比较常用(2)修改原矩阵的内容,但是这样做的话要我们要确保最后能够把它复原3、dfs的返回值不一定是void,如果该题目并不只是完全地去统计,而是涉及到我们做出的选择可能会错误的时候,这个时候我们就需要通过bool类型的返回值来帮助我们判断当前的填法是否正确。比如解数独和单词搜索问题
2024-04-05 01:05:46 1917 98
原创 DP:斐波那契数列模型
斐波那契数列用于一维探索的单峰函数之中,用于求解最优值的方法。其主要优势为,在第一次迭代的时候求解两个函数值,之后每次迭代只需求解一次。
2024-03-22 21:10:21 999 84
原创 C++:继承与派生
继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。
2024-03-11 15:08:35 1184 50
原创 C++:模版进阶 | Priority_queue的模拟实现
模版就相当于是冰箱里的菜,全特化版本就相当于是即食菜,而偏特化就相当于是预制菜。重新写一个特定的仿函数就相当于是外卖 外卖>即食菜>预制菜>冰箱里的菜。
2024-03-09 00:02:04 3153 82
原创 C++:Stack和Queue的模拟实现
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。
2024-03-08 16:11:53 2436 58
原创 C++:List的使用和模拟实现
而earse必然会失效,因为该迭代器对应的节点被删除了。如果我们想继续用的话,就得利用返回值去更新迭代器,返回值是被删除元素的下一个位置的迭代器。
2024-03-08 15:02:28 2823 53
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人