本文主要是介绍前缀和1️⃣-一维前缀和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:**【模板】前缀和_牛客题霸_牛客网**
题目描述:
解法(前缀和):-->快速求出数组中某一个连续区间的和
算法思路:
◉ 先预处理出来一个「前缀和」数组:
用 dp[i] 表示: [1, i] 区间内所有元素的和,那么 dp[i - 1] 里面存的就是 [1,i - 1] 区间内所有元素的和,那么:可得递推公式:dp[i] = dp[i-1] + arr[i]
;
◉ 使用前缀和数组,「快速」求出「某一个区间内」所有元素的和:
当询问的区间是 [l, r] 时:区间内所有元素的和为: dp[r] - dp[l - 1]
。
C++算法代码:
#include <iostream>
using namespace std;
#include <vector>int main() {//1.读取数据int n,q;cin >> n >> q;vector<int> arr(n+1);for(int i = 1; i <= n;i++) cin >> arr[i];//2.预处理出来一个前缀和数组vector<long> dp(n+1);for(int i = 0; i <= n; i++) dp[i] = dp[i-1] + arr[i];//3.使用前缀和数组int l = 0,r = 0;while (q--) {cin >> l >> r;cout << dp[r] - dp[l-1] << endl;}return 0;}
这篇关于前缀和1️⃣-一维前缀和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!