2020暑期算法学习
Rati0nal
这个作者很懒,什么都没留下…
展开
-
算法学习记录——暑假第二周(3)——Trie树、并查集以及哈希
本文复习内容概括: Trie树和并查集都是针对集合插入/处理/查询操作所提出的高效处理算法 其中Trie树侧重于字符串集合的维护,并查集侧重于数字集合的合并 Trie树 基本思路示意:树的存储方式:声明一个二维数组int son[N][26]。其意义是对于每个节点有26个子节点,但只有当这些节点上有非0值的时候才被视为真的子节点,然后再更新当前位置处理子节点的子节点。【在字符串结尾进行标记可区分abc与abcdf(如图所示)】 Tire树的插入与查询操作 全局变量声明 char str[N]; int原创 2020-08-06 12:11:38 · 129 阅读 · 0 评论 -
算法学习记录——暑假第二周(2)——单调栈、单调队列、KMP
本文目录单调栈与单调队列KMP算法 单调栈与单调队列 适用题目:适用于’输出每个数左/右边第一个比它小的数’或’定长范围内的最大(最小)值’类型的题目 核心思维:在每次都输出最值的题目中,每有一个新值进来,都与目前队列/栈里面的一端极值进行比较,只有有可能被输出出来的东西可以进栈,永远不可能被输出的东西直接从输入阶段就被淘汰,这样下来最终形成队列/栈的值是单调递增/递减的 代码略 因为单调队列/栈主要的是思路,实现很简单 KMP算法 KMP类型题目描述: 给定一个模式串S,以及一个模板串P,所有字原创 2020-08-03 11:13:31 · 89 阅读 · 0 评论 -
算法学习记录——暑假第二周(1)——数组实现单双链表
前言:经典链表节点的实现 经典结构体创建节点方式:结构体方法 struct Node { int val; Node *next; } 其缺点比较明显:每添加一个节点都要new Node();一下,这样和数组模拟相比会慢很多。所以比较适合在笔试时候用,实际操作的时候用数组可能会更好一些。 数组模拟实现单链表 单链表能实现的东西: 邻接表 存储图 存储树 实现单链表需要声明的东西: 数组模拟实现双链表 双链表能实现的东西: 优化某些问题 ...原创 2020-07-31 13:19:54 · 100 阅读 · 0 评论 -
算法学习记录——暑假第一周(4)——双指针算法、位运算、离散化、区间合并
双指针算法 双指针算法有效地降低了时间复杂度,是一个十分有价值的思考方法 这种算法可以用来求最长连续不重复子序列 基本模板 for(int i=0,j=0;i<n;i++) { while(j<=i&&check(j,i)) { 具体操作 } } 位运算 这里主要介绍树状数组的灵魂函数——lowbit函数,此函数用来返回x的最后一位1 //返回x的最后一位1,在返回时附带其后面的0 //例:14=1110 lowbit(15)返回二进制10,十进制2 int lowb原创 2020-07-11 14:37:26 · 136 阅读 · 0 评论 -
算法学习记录——暑假第一周(3)——前缀和、差分
前缀和 前缀和即前n项和。 题目i 部分代码如下 int n; //数组元素个数 int a[100003],s[100003]; cin>>n; for (int i = 1; i <=n ; ++i) cin>>a[i]; //s[n]为前n项和(前缀和) for (int j = 1; j <=n ; ++j) s[i]=s[i-1]+a[i]; //查询 //区间[l,r]的区间和 cout<原创 2020-07-10 23:57:35 · 228 阅读 · 0 评论 -
算法学习记录——暑假第一周(2)——高精度运算(大数运算)
本文主要内容:高精度算法 高精度加法 高精度减法 高精度乘法 高精度除法 高精度算法是一种必须熟练掌握的算法,在C++领域中要解决大数问题的基本方式。 注:本文的高精度算法的处理顺序除了除法都是从低位到高位,除法是从高位到低位(与竖式计算方法保持一致) 本文的数字顺序是大数在符号前小数在后 高精度加法 核心思想:声明一个进位变量t模拟进位 //C=A+B //注意此函数是从高位处理到低位的 vector<int> add(vector<int> &A,vecto原创 2020-07-10 00:08:27 · 127 阅读 · 0 评论 -
算法学习记录——暑假第一周(1)——排序、二分查找
基本复习板块:原创 2020-07-09 16:30:35 · 115 阅读 · 0 评论