自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 位运算(一些简单算法)

位运算思想:第一个题的思想:求出第K位的二进制下标是几,例如(1111)从右往左的下标是0,1,2,3。当我们要求第三位的下标是几时,我们先将数左移K位到个位,然后再&1,这样就可以准确的求出个位是0还是1,个位所求即为答案。第二个题思想:了解x&-x代表什么,-x其实就代表x取反码加1为补码,通过运算得出,x&-x每次求出的是从右往左第一个为1的二进制数。例如0010010001,第一次得到最后一个0000000001,第二次0000010000,第三次0010000000。我们

2022-04-20 22:54:06 327

原创 双指针算法

双指针算法思想:通过设置两个指针去遍历你所写的数据,通过题目所需要的具体要求,写出相应的逻辑。他的应用主要是将需要两个for循环的n方的时间复杂度优化到n.注意。你设置指针的时候,一定要想好这个指针指哪,另外一个指针指哪。保证在其逻辑上不发生太多的错误。题目。代码。#include<iostream>using namespace std;const int N=1010;int q[N],s[N];int n,ret=0;int main(){ scanf("%d"

2022-04-19 21:24:07 128

原创 差分矩阵算法

差分矩阵思想:给定原矩阵a[i,j],构造差分矩阵b[i,j],使得a[][]是b[][]的二维前缀和。差分核心操作:给以(x1, y1)为左上角,(x2,y2)为右下角的子矩阵中的所有数a[i, j],加上C对于差分数组的影响.注意:一定要自己画一个图了解,不能只看思想和代码。题目。代码。#include<iostream>using namespace std;const int N=1010;int a[N][N],b[N][N];int m,n,q;void ins

2022-04-18 19:23:53 739

原创 差分的算法

差分思想:当我们要在一个数组a[N]的[l,r]区间之中+c的时候,我们可以再创建一个数组b[N],使之a[N]是b[N]的前缀和,b[N]是a[N]的差分,如b[1]=a[1],b[2]=a[2]-a[1]…b[n]=a[n]-a[n-1]。如果我们要在[l,r]加上c,就可以转化为在b[l]+c,b[r+1]-c,这样我们又没改变其a数组,又求出了在这个范围的数加上C的值,然后这个时间复杂度是O(1)的。注意他们都是从1开始存储的,因为开始留0是为了对付[l,r]=[1,10]这种情况。当然我们也

2022-04-17 16:01:51 345

原创 子矩阵的和算法

子矩阵的和思想:就先把二维数组[i,j]想象成一个x,y坐标,把[0,0]看成原点,把它画在右下方,横轴代表列j,竖着的代表i。再用一个数组去保存前[i,j]矩阵里的和,原理是通过其各个部分加起来,再减去加了两次的地方。然后求子矩阵的和是用一个完全的矩阵减去不包含在其中的矩阵,然后再加上减了两次的地方,就得到了我们所需要的子矩阵的和。注意。不管是初始化矩阵还是求取初始化矩阵的[i,j]的和,他们都是从[1,1]开始的,因为最开始的数据要保存0,这样我们求矩阵和的时候才能更加方便,还有时刻注意那坐标的变

2022-04-16 23:10:24 1963

原创 一维数组的前缀和算法

一维数组的前缀和思想:开辟一个数组去存他的第几项和,比如s他的[3]就是求数组的a的前三项和。他的作用是当你要求第3到第9项的和的时候能够快速的通过数s9-s2求出来。注意。他们是从1开始存的,因为当我们要求取1到10的时候,我们才可以通过通用公式s10-s(1-1)求到正确的答案,如果不懂的话也可以通过代码来认识。代码。#include<iostream> using namespace std;const int N=100010;int a[N],s[N];int m,n

2022-04-11 20:28:26 168

原创 高精度除法算法(大数除于小数)

高精度除法(大数除于小数)思想:和人一样,人是从高位除,得出结果。但有点不一样的是每次除于之后的余数,如果高位后面还有数没有数的话,需要把余数乘于10,再加上下一位数。继续后面的运算,最后再把前置的0消除。注意。除法是从高位开始计算的,但我们进行计算的时候,是混合运算,其他加减乘是从低位开始的。所以我们也要遵守规则,改变一下运算顺序。所以写题目的时候还是要注意实际情况。代码。#include<iostream>#include<vector>#include<al

2022-04-11 00:05:33 2224

原创 高精度乘法算法(大数乘小数)

高精度乘法(大数乘小数)思想:把你所需要乘的数(数字位数较小的数看成一个整体),通过大数字与整体想乘所得的数除于10得进位,取余数得到这一位上的数是几、注意:高位没数的时候,我们还有进位的时候说明循环还没有结束,需要加上这一个条件继续完成循环。代码。#include<iostream>#include<vector>#include<algorithm> using namespace std;//高精度乘法 vector<int>mu

2022-04-09 14:06:26 1151

原创 高精度减法算法(两个大正整数相减)

高精度减法(两个大正整数相减)思想:对给出的两个数的大小进行判断,被减数大于减数的运算顺序不变,被减数小于减数的,需要调换位置传入参数进行计算,在输出时,需要在前面加上负号。注意:在扩展时,可以也对负数计算,思路是输入一个字符串,判断首位是不是-,如果是负号的话进行标记,后面可根据|A|-|B|等方式来解决。代码。#include<iostream>#include<vector>using namespace std;//A与B值大小的比较bool cmp(vec

2022-04-08 14:48:29 496

原创 高精度加法算法

高精度加法(大数字的加法)思想:利用人的思想去实现加法注意:大数字用int 存不下来,所以只能用数组来存储。又因为数字的高位需要进位,所以数组的最后一位存的是高位,a[0]存的是低位。代码#include<iostream>#include<vector>using namespace std;//c=A+Bvector<int> add(vector<int>&A,vector<int>&B){ vecto

2022-04-07 23:39:35 140

原创 二分查找算法

二分查找思想:有单调性的数能够二分,但能二分的不一定具有单调性。二分是一定有解的,如果所求的值无解的话可能是题目的问题。二分是分成两段的,基本上是每段都包含解的(但还是根据实际问题分析),利用不断缩小范围来找到我们的答案。注意二分查找分为整数查找和小数查找,其中整数查找是存在边界问题的,小数没有。步骤(整数)1.先找到其中间数mid=l+r>12.检查q[mid]与所查找值比较3来判断成立时候l=mid还是r=mid,如果l=mid就需要把第一步加1后再除于2(因为当l=r-1时,mi

2022-04-06 20:51:51 129

原创 归并排序算法

归并排序原理:运用双指针来求解问题,时间复杂度nlog2(n)原理步骤:1.先找到数组的中间值mid=(l+r)>>22递归,把递归的各段排好顺序3.归并,把所得到的归并到一起例如:(归并思想)1 3 5 7 9这个指针先指向12 4 5 8 10 这个指针先指向2指定一个temp[]数组,1小于2,1加入temp,第一段指针指向3,第二段不变指针指向2,2小于3,2加入temp,第一段不变,第二段指向4,4比3大,3加入temp,第一段指针移到5,4小于5,4加入temp,第

2022-04-05 19:47:33 802

原创 快速排序算法

快速排序思想:通过最左值或者中间值或者最后值(取左右值的时候注意边界问题),以此把序列分成两个部分小的在其值的左边。然后通过不断的递归把需要排序的数组排好。例如: 5 3 7 2 3 6 5 2 8 以第一个5为值,设置指针两个指针分别指向首尾,当首指针向后遍历找到大于等于5时停下,尾指针向左遍历找到小于5的值停下。然后首尾指针现在指向的值相互调换,继续遍历,第一次遍历输出2 3 7 2 3 6 5 5 8,遍历完后是2 3 3 2 7 6 5 5 8,然后再递归,递归完后得到最终答案2 2 3

2022-04-05 18:33:39 427

空空如也

空空如也

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

TA关注的人

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