![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
#数据结构与算法
文章平均质量分 51
该部分是本人所学习数据结构与算法的一些理解分享给大家,感谢大家的观看,让我们一起进步吧!!!
娇娇yyyyyy
大一新生fw:本人在此声明,写博客纯粹是为了提升自己并且为了以后的复习用,希望大家一起加油!!!
展开
-
基础数据结构第十期 哈希表(数组+STL)
哈希表(Hash Table),也被称为哈希映射(Hash Map)或字典(Dictionary),是一种常见的数据结构,用于高效地存储和检索数据。它利用哈希函数(Hash Function)将关键码(Key)映射到存储位置,从而实现快速的查找、插入和删除操作。哈希表的基本思想是将关键码通过哈希函数转换成一个固定长度的哈希值(Hash Value),然后将该哈希值作为索引来访问数组(或者称为哈希桶)中的特定位置。这样,可以通过哈希函数直接计算出元素的存储位置,从而快速定位到所需的数据。在C++中底层使用了哈原创 2024-01-10 06:30:00 · 478 阅读 · 0 评论 -
基础数据结构第七期 Trie树
1、根节点不包含字符,除根结点之外每一个结点都只包含一个字符;2、字典树用边表示字母表示3、从根节点到某一结点, 路径上经过的字符连接起来,为该结点对应的字符串4、每个节点的所有子结点包含的字符都不同。每个结点最多有26个子节点(假设给定字符集中包含26个英文字母)5、有相同前缀的单词共用前缀节点6、整棵树的根节点是空的,便于插入和查找7、每个单词结束的时候用一个特殊字符表示,那么从根节点到任意一个特殊字符,所经过的边的所有字母表示一个单词8、Trie树的空间效率较低,实际上是用空间来换时间的原创 2024-01-07 06:30:00 · 545 阅读 · 1 评论 -
基础数据结构第八期 并查集
前言并查集这部分还是挺重要的,应该要熟练掌握哦!!!一、并查集的基本概念作用:1、将两个集合合并2、查询是否在一个集合内基本原理:每个集合用一棵树来表示,树根的编号就是整个集合的编号,每个节点储存它的父节点,p[x]表示x的父节点。问题:1、如何判断树根:if(p[x] == x)2、如何求x的集合编号:while(p[x] != x) x = p[x]3、如何合并两个集合:px是x的集合编号,py是y的集合编号,p[x] = y二、例题1原创 2024-01-08 06:00:00 · 1181 阅读 · 1 评论 -
基础数据结构第九期 堆(数组+STL)
q.push(1);q.push(2);return 0;q.push(1);q.push(2);return 0;q.push(1);q.push(2);return 0;原创 2024-01-09 12:25:44 · 624 阅读 · 0 评论 -
基础数据结构第六期 KMP算法
KMP算法的核心是求解next[]数组,即我们在匹配失败后j应该跳到的位置,下面给出next数组的求法 模板:KMP算法的流程如下:假设现在文本串S匹配到i位置,模式串P匹配到j位置,如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),令i++,j++,继续匹配下一个字符;如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令i不变,j = next[j],即模式串P相对于文本串S向右移动了j - next [j]位。当匹配失败时,模式串向右移动的位数为原创 2024-01-06 06:30:00 · 503 阅读 · 1 评论 -
基础数据结构第五期 滑动窗口
滑动窗口究其本质就是一种基于双指针的思想,两个指针指向的元素之间形成一个窗口。常见的滑动窗口有两类:原创 2024-01-05 06:30:00 · 811 阅读 · 1 评论 -
基础数据结构第一期 链表(单链表+双链表)
二、双链表 模拟过程:1、用两个数组来代表左单链表和右单链表,即为l[N],r[N]2、l[N]数组为指向右边的链表,r[N]为指向左边的链表3、e[N]为当前结点的值4、设r[0]=1,l[1]=0,因为是相互指向5、同样用一个idx来储存当前结点用到了哪一点图例:原创 2024-01-01 08:00:00 · 506 阅读 · 0 评论 -
基础算法第八期 区间合并
前言区间合并这种算法并不是很常用,但是大家也应该掌握一、区间合并的概念先以区间的左端点进行排序,然后将每个区间进行和并,共有三种情况:1:新区间是维护区间的子区间2:新区间与维护区间有相交部分3:新区间与维护区间没有相交部分二、典型例题例题:AC代码:#include<iostream>using namespace std;#include<vector>#include<algorithm&g原创 2023-12-31 14:18:40 · 449 阅读 · 0 评论 -
基础算法第三期 前缀和及差分(一维+二维)
int nn;sum[0]=0;i<=n;//这里将a数组的前n项和储存起来,即该公式即为一维前缀和int l,r;cin>>l>>r;//在这里需要判断一下大小关系//这里直接求出即可return 0;原创 2023-12-27 19:35:46 · 672 阅读 · 2 评论 -
基础算法第六期 位运算(常用操作)
/优化版while(x){cnt ++;return cnt;原创 2023-12-29 22:20:26 · 356 阅读 · 1 评论 -
基础数据结构第四期 单调栈
单调栈既然被称为单调,说明在栈内的元素是单调的,分为单调递增栈,单调递减栈。原创 2024-01-04 11:54:20 · 573 阅读 · 1 评论 -
基础算法第五期 逆序对的数目(暴力+归并排序讲解)
上网搜了一下:设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对,也称作逆序数。原创 2023-12-29 18:32:31 · 679 阅读 · 1 评论 -
基础数据结构第二期 栈(数组模拟栈+STL)
前言栈的内容不算多,题目也就那几个,因此只需要掌握基本操作即可一、栈的基本概念(1)栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。(2)操作:入栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。二、栈的例题及AC代码例题:AC代码:数组模拟://**********************原创 2024-01-02 08:00:00 · 668 阅读 · 0 评论 -
基础算法第七期 区间和(离散化)
/ 存储所有待离散化的值// 将所有值排序// 去掉重复元素// 二分求出x对应的离散化的值int find(int x) // 找到第一个大于等于x的位置// 映射到1, 2, ...n// 不加1的话是从0开始映射。原创 2023-12-30 13:49:14 · 451 阅读 · 1 评论 -
基础数据结构第三期 队列(数组模拟队列+STL)
队列和我们之前学习的栈一样,它也是一种特殊的线性表。它只允许在一端插入数据,在另一端删除数据,不允许对中间的元素进行操作,因而也不支持随机访问。队列具有先进先出的特性。入队: 队列 的插入操作叫做入队,插入数据的一端称作队头出队: 队列 的删除操作叫做出队,删除数据的一端称作队尾原创 2024-01-03 08:00:00 · 551 阅读 · 1 评论 -
基础算法第一期:二分模板(数组+STL)
二分是算法中十分重要的算法,因此应该记熟它的模板并且深刻的理解。原创 2023-12-25 13:55:26 · 703 阅读 · 2 评论 -
基础算法第二期 高精度模版(STL)
大家将STL版本的理解记住即可!!!//与下面的if相呼应//c容器用来储存两数之和int t = 0;//t储存每两个位数相加的和//该位与上面的return相呼应//将数字储存起来t /= 10;//两个小于10的数相加可能会超过10,此时进一//如果t不为0,说明最后相加有余留的,即t为最高位数字return C;//返回的类型为vector<int>型int main()//因为数长度较大所以用字符串来储存。原创 2023-12-26 14:29:54 · 601 阅读 · 3 评论 -
基础算法第四期 :双指针算法(求最长重复子序列)
i <n;i++)j++;//具体题目的解题思路}、原创 2023-12-28 11:18:12 · 638 阅读 · 0 评论