admin管理员组文章数量:1794759
算法之【前缀和】讲解
前言:
我们首先要明白何前缀和?
前缀和就是快速求出数组中某一个连续区间的和。算法的时间复杂度会降一个等级!
本文章主要讲解前缀和模板,分别为一维前缀和和二维前缀和。
一维前缀和:
第一步:预处理出来一个前缀和数组。
dp[i] 表示 [1,i] 区间的所有元素。
dp[i] = dp[i-1] + nums[i]
第二步:使用前缀和数组
下面是区间l~r求连续数组的公式。
原码:
代码语言:javascript代码运行次数:0运行复制#include <iostream>
using namespace std;
#include<vector>
int main()
{
int n = 0,q = 0;
cin >> n >> q;
vector<int> arr(n+1);
vector<long long> dp(n+1);//防止数据溢出
for(int i = 1;i<n+1;i++)
cin >> arr[i];
for(int i = 1;i<n+1;i++)
dp[i] = dp[i-1]+arr[i];//开辟前缀和数组
int left = 0;
int right = 0;
while(q--)
{
cin >> left >> right;
cout << dp[right] - dp[left-1] << endl;//使用前缀和数组
}
return 0;
}
二维前缀和
第一步:预处理出来一个前缀和数组。
二维的思想其实就是求面积。
第二步:使用前缀和数组
总结:
前缀和的核心就是在求前缀和数组和如何使用前缀和数组的公式,更重要的是前缀和的思想,不能死记模板~
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-01-24,如有侵权请联系 cloudcommunity@tencent 删除数据数组算法dpint本文标签: 算法之前缀和讲解
版权声明:本文标题:算法之【前缀和】讲解 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754809691a1706724.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论