快去自定义签名吧~|

张詠然

园龄:3年6个月粉丝:3关注:3

05 2022 档案

KMP
摘要:KMP kmp是快速在s[]长文本中匹配p[]模式串,并返回起始坐标 朴素算法: for (int i = 1; i <= m; i ++ ) { bool flag = true; for (int j = 1; j <= n; j ++ ) if (s[i] != p[j]) { flag =
37
0
1
基础数据结构(1)
摘要:基本数据结构(1) 单链表于双链表 单链表 单链表的几种操作 在表头插入一个数:先将这个数指向head指向的数,再将head指向这个数 在表中的第k位后面插入一个数:先将这个数指向第k位指向的数,再将第k位指向这个数 在表中删除一个数:让这个数直接指向下一个数的下一个数 代码实现: // e是所有数
18
0
0
离散化与区间合并
摘要:离散化与区间和并 离散化 离散化的作用 若有一个值域很大但值的个数很少数组,我们要用下标做题,必定不能开特别长的数组 可以将下标映射到从从零开始的自然数 模板 离散化是将所有用到的下标都存到一个数组里面再去重,通过二分来找映射后的数组下标 模板如下 vector<int> alls; // alls
19
0
0
双指针算法
摘要:双指针算法 双指针算法是一个优化算法 什么是双指针 双指针就是用两个指针相向或相对地遍历,用来维护某种性质 为什么要用双指针 双指针的主要目的是优化 比如一道题的做法如下 for (int i = 0; i < n; i ++ ) { for (int j = 0; j < n; j ++ ) {
18
0
0
前缀和与差分
摘要:前缀和与差分 前缀和和差分更像是一种思想 一维前缀和 一维前缀和的定义:s[i] = s[1] + s[2] + ... + s[i] 用处:快速算一段区间的和:s[l] + ... + s[r] = s[r] - s[l - 1] 二维前缀和 二位前缀和的定义 如图,前缀和数组中(x1, y1)的
37
0
2
高精度
摘要:高精度 高精度是因为c++的整数类型并不能存特别长的数,所以要用数组存储来模拟四则运算 高精度基本就是模拟的人列竖式时的运算过程 因为有最高位有进位现象,所以要将各位存到数组的第一位 具体存储方式如下 // 例如用a, b两个字符串读入,用两个vector来存 vector<int> A, B; i
110
0
1
二分
摘要:二分 整数二分 二分查找是用 logn 的时间复杂度查找一个元素 原理:每次都让当前查找的区间长度减半 取当前区间的中点 像一个性质,然后更新区间 如果l和r重合,则查找完毕 // 第一种模板 while (l < r) { int mid = l + r + 1 >> 1; if (che
38
0
0
排序
摘要:排序 快速排序 核心思想:分治 确定分界点x 调整区间使得所有≤x的数都在x左边,≥x的数都在x右边 递归左右两边(双指针) 代码如下 void quick_sort(int q[], int l, int r) { if (l >= r) return; int x = l + r >> 1, i
32
1
1
点击右上角即可分享
微信分享提示
深色
回顶
收起