当前位置: 首页 > news >正文

acwing算法基础之基础算法--前缀和算法

目录

  • 1 知识点
  • 2 模板

1 知识点

前缀后下标尽量从1开始,当然不从1开始也是ok的。
a 1 , a 2 , a 3 , . . . , a n a_1,a_2,a_3,...,a_n a1,a2,a3,...,an
S 1 , S 2 , S 3 , . . . S n S_1,S_2,S_3,...S_n S1,S2,S3,...Sn
S i S_i Si:原数组nums中前 i i i个元素的和,注意边界情况 S 0 = 0 S_0=0 S0=0
前缀和的作用, O ( 1 ) O(1) O(1)时间复杂度下求取原数组中任一区间和[l,r]。

二维前缀和
初始化(类似于递推公式):
S ( i , j ) = S ( i − 1 , j ) + S ( i , j − 1 ) − S ( i − 1 , j − 1 ) + n u m s [ i ] [ j ] S(i,j) = S(i-1,j) + S(i, j-1) - S(i-1,j-1) + nums[i][j] S(i,j)=S(i1,j)+S(i,j1)S(i1,j1)+nums[i][j]
计算任一矩形面积:
( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2)
S ( x 2 , y 2 ) − S ( x 1 − 1 , y 2 ) − S ( x 2 , y 1 − 1 ) + S ( x 1 − 1 , y 1 − 1 ) S(x_2,y_2)-S(x_1-1,y_2)-S(x_2,y_1-1)+S(x_1-1,y_1-1) S(x2,y2)S(x11,y2)S(x2,y11)+S(x11,y11)

2 模板

//一维前缀和
//原数组nums,它第1个元素是无效的,即nums[0]是无效的
//前缀和数组s
//原数组中[l,r]区间之和为:s[r]-s[l-1]。注意此处的l和r均不考虑无效元素nums[0],也即下标从1开始。
int n = nums.size();
vector<int> s(n);
s[0] = 0;
for (int i = 1; i < n; ++i) {s[i] = s[i-1] + nums[i];
}
//二维前缀和
//原数组nums,其中第0行和第0列是无效值
int n = nums.size(), m = nums[0].size();
vector<vector<int>> s(n, vector<int>(m, 0));
for (int i = 1; i < n; ++i) {for (int j = 1; j < m; ++j) {s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + nums[i][j];}
}//(x1,y1) (x2,y2) 注意此处下标从1开始。
//求子矩阵的和
s[x2][y2] - s[x1-1][y2] - s[x2][y1-1] + s[x1-1][y1-1]
http://www.lryc.cn/news/184596.html

相关文章:

  • 华为云云耀云服务器L实例评测|Ubuntu 22.04部署edusoho-ct企培版教程 | 支持华为云视频点播对接CDN加速
  • 土木硕设计院在职转码上岸
  • js查询月份开始和结束日期
  • mybatis开发部分核心代码
  • Springboot中查看gradle工程使用了哪些仓库
  • c#中的接口
  • 老卫带你学---leetcode刷题(76. 最小覆盖子串)
  • Maven-DskipTests和-Dmaven.test.skip=true的区别
  • conda中cuda、cuda-toolkit、cuda-nvcc、cuda-runtime的区别
  • 增强现实抬头显示AR-HUD
  • 力扣-367.有效的完全平方数
  • 小白必看!上位机控制单片机原理
  • 通过套接字手动写一个回显服务器吧
  • python读取CSV格式文件,遇到的问题20231007
  • 【面试题精讲】为什么重写equals时必须重写hashCode方法?
  • 一文搞懂pytorch hook机制
  • 文本挖掘入门
  • 【C++ techniques】Smart Pointers智能指针
  • LabVIEW利用以太网开发智能液位检测仪
  • 文字转语音:语音合成(Speech Synthesis) 数组文字循环播放
  • Spark基础
  • localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问
  • 快速掌握批量合并视频
  • OpenCV利用Camshift实现目标追踪
  • 使用pywin32读取doc文档的方法及run输出乱码 \r\x07
  • 一天一八股——TCP保活keepalive和HTTP的Keep-Alive
  • 头部品牌停业整顿,鲜花电商的中场战事迎来拐点?
  • 深入解读redis的zset和跳表【源码分析】
  • elasticsearch内存占用详细分析
  • 【研究生学术英语读写教程翻译 中国科学院大学Unit3】