自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 kmp算法操作的小小理解

用于在一大串字符中查询一段字符。 一大串字符用s[]表示 需要查询的一段字符用p[]表示 int next[]数组 构造next数组 int j;代表指向需要查询的字符段当中一个个字符的位置 void kpm匹配算法() { //构造next数组 for(int i=2,j=0;i<=n;i++) //next数组与需要查询的字符串有关 { while(j&&p[i]!=p[j+1...

2021-09-08 21:04:29 68

原创 单向链表(用数组表示)

链表即为使用链式存储的一种数据结构 其基本原型为 typedef struct Node { ElemType data; struct Node }

2021-09-07 22:57:36 280 1

原创 关于二进制运算总结

1.将十进制的n转化为二进制并输出其第k位。 n>>k&1; "n>>k"的含义是将n转为二进制,并右移k位 例: 10的二进制为1010. 当k为3时,n>>k的数为1 20的二进制为10100 当k为3时,n>>k的数为10 2.二进制的位数 例: 1 0 1 1 0 1 1 0 位数 7 6 54 3 2 1 0 3.lowbit函数返回...

2021-09-06 22:30:58 365

原创 开平方根算法(二分查找)

double Sqrt(int a) { double l=-100,r=100;//开平方跟的数在[-100,100]这个区间中 while(r-l>1e-8) { double mid=(l+r)/2; if(mid*mid>a)r=mid; else l=mid; } return l; ...

2021-09-06 16:37:03 239

原创 区间合并.(双指针)

模拟将各个零散的区间()进行合并,取有交集的区间的并集 最后统计一共有多少个并集 void merge(vector<pair(int,int)>arr) { int st=-2e9;int ed=-2e9; //设置两个指针指向第一位 vector<pair(int,int)>brr; //维护数据 for(auto item:arr) //遍历arr数组 { ...

2021-09-05 22:38:34 82

原创 离散化算法

在对于大范围的数组中对小范围的数进行运算时,缩小操作的数组,使用离散化算法可以降低时间复杂度。 离散化算法是使用vector容器记录需要离散化数据的下标,对其下标进行下一步操作 例:令一段数列中的第x个数加上c,执行n次,给出m个[l,r]的范围,求该范围的和 思路: 1.对于求和可以用前缀和的方式求和 即int a[N],s[N]保存数据 2.记录所有操作的下标和操作 3.将需要操作的下标和所有l,r的范围记录到离散化数组中 4.对离散化数组去重(需要对数组中保存的下标先排序再去重)

2021-09-05 16:56:55 752

原创 前缀 和 差分 数

前缀和主要用于在一段范围内的数组中进行加减操作 在数组a[n]中,其前缀和数组s[n] s[n]=s[n-1]+a[n] 特别注意!!!s[0]一定要空出来,s[n]初始化一定要从1开始,防止数组越界 例:求n个数中在[l,r]中的和 const int N = 1000010; int a[N]; int s[N]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { ...

2021-09-04 20:37:11 74

原创 大数相加减

高精度大数相加减 vector容器中存储的数字都倒叙如:123为[3,2,1] vector<int> add(vector<int>&a,vector<int>&b) { if(a.size()<b.size()return add(a,b); int t=0;vector<int>c;//t为加出来多的数 for(int i=0;i<a.size();i+...

2021-09-04 19:30:10 65

原创 二分查找.

使用循环的方式二分查找 最后l停留的位置就是查找到该数的位置 int arr[1000010]; void check(int n.int m)//n一共有多少数字 m查找的数字 { int l=0;int r=n-1; while(l<=r) { int mid=(r+l)/2; if(arr[mid]>=m)r=mid; ...

2021-09-04 16:13:09 53

原创 快排,递归排序总结

快排: int arr[10000]; void quickSort(int left, int right)//设置起始位置和截止位置指针 { //随意选取一个数 int mid; mid = (left + right) / 2; int i = left; int j = right; do { while (arr[i] < arr[mid])i++; while (arr[j] > arr[m...

2021-09-04 15:23:17 105

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除