算法基础之前缀和

前缀和

我们先从题目来插入
首先
输入用例为:
6 1
1 2 3 4 5 6
2 4
表示的是输入6个数并进行1次查询
然后是6个数
最后查询是从第2到第4个的和,输出变化后的数列

遇到这种题目 暴力破解可以,直接for循环从i=2,i<=4就行

但是如果数列比较大而查询的次数又比较多,别如10个数查询50次

每次遍历1遍,需要500次,就会使得算法复杂度为O(n*m)

所以为了优化算法,降低复杂度,就出现了前缀和

前缀和,核心思想是先遍历一遍把数存起来,然后查询时只要把遍历地结果输出出来即可

这样算法的复杂度就将为O(n);

code:

 1 #include<stdio.h>
 2 int N[1000],sum[1000];
 3 int main()
 4 {
 5     int n,a,l,r;
 6     scanf("%d%d",&n,&a);//录用几个数 和查询几次 
 7     for(int i=1;i<=n;i++)
 8     {
 9         scanf("%d",&N[i]);
10     }
11     for(int i=1;i<=n;i++)
12     {
13         sum[i]=sum[i-1]+N[i];//累加将N[i]的值加到sum[i]中
14     }
15     for(int i=1;i<=a;i++)
16     {
17         scanf("%d%d",&l,&r);//从l-1至r的和 即2-4的和 
18         printf("%d\n",sum[r]-sum[l-1]);
19     }
20  
21     return 0;
22 }

 


这篇文章以互相学习为主,有什么错的还望告知,谢谢啦

我们都是追梦人,我们都在努力前行!!!

(ps :小声bb, 如果有人看的话,我就会持续更新算法基础哦)

posted on 2021-11-27 20:16  LonelinessKid  阅读(86)  评论(0)    收藏  举报

导航