学习内容:
1、前缀和与差分
2、树
3、Java的string
学习时间:
8:00~8:05 签到
9:00~11:30 Java的string
12:00~1:00 树
1:30~2:30 刷题
3:00~5:30 前缀和与差分
前缀和
一维数组
公式:
int sum[N],a[N]; //sum[i]=a[1]+a[2]+a[3].....a[i];
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];
}
二维数组
公式:
s[i] [j] = s[i-1][j] + s[i][j-1 ] + a[i] [j] - s[i-1][ j-1];
差分
差分是逆前缀和,a[n],差分b[n],也就是a[n]==b[n]+b[n-1]。
一维数组
公式:
b[n] = a[n] - a[n-1];//求差分
b[l]+=c; //表示将序列中[l, r]之间的每个数加上c
b[r+1]-=c;
b[i]+=b[i-1]; //求前缀和运算
printf("%d ",b[i]);
二维数组
公式:
b[x1][y1] + = c;
b[x1,][y2+1] - = c;
b[x2+1][y1] - = c;
b[x2+1][y2+1] + = c;//求差分数组和区域加上一个c
b[i][j]=a[i][j]−a[i−1][j]−a[i][j−1]+a[i−1][j−1];//求a[i][j]+c;
完全二叉树
可以用一维数组存储,求父亲下标为i/2,求其儿子,左i2,右i2+1。
遍历方式
前序遍历:root -> left -> right
中序遍历:left -> root -> right
后续遍历:left ->right -> root