差分和前缀和都是算法里边比较重要的知识点,不过学习的难度并不高,这篇文章会讲解相关的内容。
1. 前缀和怎么玩
1)一维前缀和
在该数之前,包括该数的所有数之和,有点类似高中学的数列的前n项和Sn。
2)二维前缀和
根据原数组生成sum数组,sum[i][j]表示从(0, 0)到(i, j)这个范围内的累加和
求法:依次求 左 + 上 - 左上 + 自己,再从左到右,从上到下生成
*往往补第0行、第0列来减少条件判断
【图解】
Q:如果要求某个范围内的累加和怎么办?
设求(a, b)到(c, d)的累加和,则累加和就是
sum[c][d] - sum[a-1][d] - sum[c][b-1] + sum[a-1][b-1]
根据sum数组的定义和下面的图解就非常清晰了
图解如下:
【练习】
有一道模版题,大家可以试着做做:链接
核心的思路就是二维前缀和,我的代码如下: