二维前缀和
定义:
二维前缀和实际上就是一个矩阵内值的和,而矩阵又可以由两个行数或列数少一的子矩阵组合后,删去重合部分再加上右下角的值来构成,也就是以下式子:
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+arr[i][j];
1.当i=0或者j=0时,此时二维前缀和会变为一维前缀和
2.当i=j=0时,此时sum[0][0]=arr[0][0];
代码实现:
for(int i=0;i<m;i++)//行
{
for(int j=0;j<n;j++)//列
{
if(i==0&&j==0)
sum[0][0]=arr[0][0];
else if(i==0)
sum[i][j]=sum[i][j-1]+arr[i][j];//第一行
else if(j==0)
sum[i][j]=sum[i-1][j]+arr[i][j];//第一列
else
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+arr[i][j];
}
}
前缀和的作用:
前缀和是一种预处理,主要用来降低时间复杂度,可以将查询的复杂度降为O(1)