数据结构
xiangjiaonigebanana
这个作者很懒,什么都没留下…
展开
-
滑动窗口总结
滑动窗口总结滑窗题型总结上图的求解过程展示中,窗口从左至右不断扩张/滑动,当窗口触达字符串末尾字符时,运算结束,窗口的宽度为最终结果。初始窗口的宽度为1,我们不断的通过向当前窗口覆盖的子串后面追加一个字符看是否能满足我们的要求,如果满足窗口扩张,如果不满足,窗口向右滑动。我们维护一个数组map[26]来存储当前窗口中各个字母的出现次数,left表示窗口的左边界,right表示窗口右边界窗口扩张:left不变,right++窗口滑动:left++, right++...原创 2020-06-28 22:58:30 · 145 阅读 · 0 评论 -
前缀和(挖坑待填)
前缀和原创 2020-06-22 23:22:53 · 137 阅读 · 0 评论 -
图
图的解法1、BFS2、DFS3、并查集并查集并查集详解 【!!!包含路径压缩】朋友圈例题:交换字符串中的元素1、初始化:每个节点的祖先节点都是自己2、根据题意两两建立关系 ,在建立关系的同时,合并朋友圈【一边建立关系,一边寻找祖先】for (int i = 0; i < pairs.size(); i++) { // 根据题意 两两建立亲子关系 int a = FindRoot(pairs[i][0], pre); int b = FindRoo原创 2020-06-10 17:13:50 · 101 阅读 · 0 评论 -
递归
什么是递归呢?函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归。比如定义函数 f(x)=x+f(x-1)若无终止条件,则这时程序会无休止地运行下去,直到崩溃。因此,递归最重要的两点:递归函数必须要有终止条件,否则会出错;递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。例:合并两个排序链表1、终止条件:当两个链表都为空时,表示我们对链表已合并完成。2、如何递归:我们判断 l1 和 l2 头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果。原创 2020-06-03 10:27:14 · 124 阅读 · 0 评论 -
BFS遍历框架
BFS广度优先搜索较之深度优先搜索之不同在于,深度优先搜索旨在不管有多少条岔路,先一条路走到底,不成功就返回上一个路口然后就选择下一条岔路,而广度优先搜索旨在面临一个路口时,把所有的岔路口都记下来(需要用到队列(queue)),然后选择其中一个进入,然后将它的分路情况记录下来,然后再返回来进入另外一个岔路,并重复这样的操作bfs是用来搜索最短径路的解法是比较合适的比如求最少步数的解,最少交换次数的解,最快走出迷宫等等,因为bfs搜索过程中遇到的第一个解一定是离最初位置最近的,所以遇到第一个解,一定就是原创 2020-05-24 15:16:41 · 211 阅读 · 0 评论 -
DFS遍历框架
DFS遍历框架二叉树问题网格问题(岛屿)图(起点-终点)1、二叉树问题二叉树的dfs遍历可以写成void dfs(TreeNode* root){ // 判断递归退出的条件 base case if(root == NULL) return; /* 中间根据题意,增加累加或者判断代码 */ dfs(root->left); //递归左子树 dfs(root->right); //递归右 子树}可以看到,二叉树的 DFS 有两个要素:「判断原创 2020-05-15 11:02:46 · 366 阅读 · 0 评论 -
图的拓扑结构
图的拓扑排序 , 判断是否有环 step 1 : 构建元素的入度 (入度:有向图的某个顶点作为终点的次数和。 出度:起点) step 2 : 找到入度为0的元素, 压入栈中 step 3 : 若栈不为空,将其pop,并找到与其相连接的元素,入度减1,若相连接元素此时入度为0,入栈例题:课程表class Solution {public: // 图的拓扑排序 , 判断是否有环 // step 1 : 构建元素的入度 (入度:有向图的某个顶点作为终点的次数和。原创 2020-05-14 10:09:03 · 1225 阅读 · 0 评论 -
哈夫曼树
哈夫曼树的基本概念带权路径长度:在树形结构中,我们把从树根到某一节点的路径长度与该节点的权的乘积,叫做该节点的带权路径长度树的带权路径长度:树中所有叶子结点的带权路径长度之和哈夫曼树又叫最优二叉树,由n个带权叶子节点构成的所有二叉树中带权路径长度最短的二叉树哈夫曼树的构建1、 将所有数从小到大排序,从下往上构建哈夫曼树2、 最小的两个数作为叶子节点,和作为一个数再进行n-1个数排...原创 2019-09-18 20:51:45 · 426 阅读 · 0 评论