算法学习 - 前缀和

前缀和

前提:数组每一维均从下标1位置开始存数

前缀和:类似于概念【数组的前i项和】,是一种重要的预处理方式

对于一维数组:有n个正整数放到数组ARR[]中,求一个前缀和数组sum[],其中,sum[i]是数组ARR[]的第一项到第i项和,由此背景,可以推出两个公式:

  • sum[1] = ARR[1]
  • sum[i] = sum[i - 1] + ARR[i]

根据这两个公式,可以将前缀和数组中任一一项求出,现在如果要求数组ARR[]的第l项到第r项的和,则可以利用前缀和数组sum[]与下列公式快速求出:

SUM = sum[r] - sum[l - 1]

对于二维数组:有n*m个正整数放到二维数组ARR[][]中,求一个前缀和数组sum[][],其中,sum[i][j]是数组ARR[][]的第一项和第i项围成的矩形区域中所有项的和,如下图所示:
在这里插入图片描述由此背景,可以推出两个公式:

前提:二维数组所有元素全部置0

  • sum[1][1] = ARR[1][1]
  • sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + ARR[i][j],如下图所示:

在这里插入图片描述

根据这两个公式,可以将前缀和数组中任一一项求出,现在如果要求数组ARR[][]的第(x, y)项到第(l, r)项的和,则可以利用前缀和数组sum[][]与下列公式快速求出:

SUM = sum[l][r] - sum[x - 1][r] - sum[l][y - 1] + sum[x - 1][y - 1],示意图如下:


前缀和一般用于进行数组预处理,提高后续操作效率,多用于计算区间和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值