03 2021 档案
摘要:1、vector 变长数组,倍增的思想 系统为某一程序分配空间时,所需时间与空间大小无关,与请求次数有关。 #include<iostream> #include<vector> using namespace std; int main() { vector<int> a; // 定义一个vect
阅读全文
摘要:1、概述 主要为以下两部分: 哈希表的存储结构 字符串的哈希方式 1.1 Hash表的作用 把一堆复杂的结构映射到0~N一个小一点的范围内 如把0 ~ 但是其中有很多没意义的数字,把其中有意义的数字映射到一个小范围内,如0 ~ 。 如下面模拟散列表的例子。 1.2 如何写
阅读全文
摘要:3.1 概述 手写堆而不是STL的堆 STL里的堆就是优先队列priority_queue 如何手写一个堆? STL支持的操作: 插入一个值 求集合中的最小值 删除最小值 STL没办法直接实现,只能间接实现的功能: 删除任意一个元素 修改任意一个元素 3.1.1 什么是堆 堆就是一个二叉树或者说是完
阅读全文
摘要:1、概述 1.1 作用 将两个集合合并 询问两个元素是否在一个集合当中 1.2 暴力做法 用一个数组belong[x] = a存储哪个元素属于哪个集合,判断就是if(belong[x] == belong[y]),复杂度O(1) 但是当我们想合并两个集合时,假如集合a有1000个元素,集合b有200
阅读全文
摘要:作用:高效地存储和查找字符串集合的数据结构 用到Trie树的题字母类型不会很多,一定都会有限制 如想在Trie中存储如下元素: abcdef,abdef,aced,bcd,bcff,cdaa,bcdc,abc 存储方式如下: 在根节点root后,从头向后遍历,在每个单词的结尾位置做标记,如下图: 那
阅读全文
摘要:就是两个串,s[N]是长串,p[M]是短串 习惯上下标从1开始 暴力做法: 就相当于每次都只挪动一个位置去匹配下一位。红色和绿色圆圈说明这个位置不匹配,将红色短线向右移动一个位置重新匹配。 KMP优化: 从上面可以看出一些规律,在前面匹配失败的情况下,我们最多可以往后移动多少位让他继续匹配。 我们要
阅读全文
摘要:2、栈与队列 2.1 栈 先进后出 用tt表示栈顶指针,tt--弹出,tt > 0说明非空 stk[++tt]插入,stk[tt]就是栈顶元素 2.1.1 练手题目 2.1.2 练手答案 #include <iostream> using namespace std; const int N = 1
阅读全文
摘要:1、链表与邻接表 这里用数组模拟,也可以用结构体和指针实现,不过每次都动态new比较慢,直接new一定数量和数据就比较相似了。 单链表:主要用途 邻接表:存储树和图 双链表:优化某些问题 1.1、单链表 e[N]表示某个点的值,ne[N]表示某个点的next指针是多少 所谓的头节点head初始值一般
阅读全文
阅读目录(Content)
此页目录为空