前缀和

220 字
1 分钟
前缀和

一维前缀和#

  1. 核心思想
  • 预处理:提前计算并储存数组的累加和,空间换时间;
  • 查询优化:O(n)->O(1);
  1. 构建前缀和数组
  • 原数组a[i],前缀和数组f[i];
f[0] = 0;
f[i] = f[i-1] + a[i]; (1 ≤ i ≤n)
  1. 区间和查询
  • 查询闭区间[l,r]的和
sum(l, r) = f[r] - f[l-1];

二维前缀和#

  1. 核心思想
  • 扩展一维思想到矩阵,快速求子矩阵的和
  1. 构建前缀和矩阵
  • 原矩阵a[m][n],前缀和矩阵f[i][j]((1,1)到(i,j)矩阵中所有元素和);
f[0][j] = f[i][0] = 0; (边界置0)
f[i][j] = f[i-1][j] + f[i][j-1] - f[i-1][j-1] + a[i][j];
  1. 子矩阵查询
  • 查询左上角(x1,y1)右下角(x2,y2)的子矩阵和;
sum = f[x2][y2] - f[x1-1][y2] - f[x2][y1-1] + f[x1-1][y1-1];

几何意义: 全区域-上侧区域-左侧区域+重叠减去的部分

  1. 时间复杂度
  • 预处理O(nm);
  • 单次查询O(1);

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录