算法基础之前缀和 学习笔记

前缀和

我们先从题目来插入
 首先 
输入用例为: 

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:

#include<stdio.h>
int N[1000],sum[1000];
int main()
{
	int n,a,l,r;
	scanf("%d%d",&n,&a);//录用几个数 和查询几次 
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&N[i]);
	}
	for(int i=1;i<=n;i++)
	{
	    sum[i]=sum[i-1]+N[i];//累加将N[i]的值加到sum[i]中
	}
	for(int i=1;i<=a;i++)
	{
		scanf("%d%d",&l,&r);//从l-1至r的和 即2-4的和 
		printf("%d\n",sum[r]-sum[l-1]);
	}

	return 0;
}

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值