数据结构与算法自用笔记(区间和(非暴力解决))

题目描述

给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。

输入描述

第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。

输出描述

输出每个指定区间内元素的总和。

输入示例

5
1
2
3
4
5
0 1
1 3

输出示例

3
9

数据范围:

0 < n <= 100000

解答

采用前缀和的思想,在数组Array之外再设置一个数组p,p[i]则是Array[0]到Array[i]之间的总和,这样的话,要计算区间总和,就可以利用p[b]-p[a]+Array[a]的公式,例如p[5]-p[2]+Array[2]就等于区间2到5之间的元素总和。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan=new Scanner((System.in));
        int n=scan.nextInt();
        int[] nums=new int[n];
        int[] p=new int[n];
        int sum=0;
        for(int i=0;i<n;i++){
            nums[i]=scan.nextInt();
            sum+=nums[i];
            p[i]=sum;
        }
        while(scan.hasNextInt()){
            int a=scan.nextInt();
            int b=scan.nextInt();
            int result=p[b]-p[a]+nums[a];
            System.out.println(result);
        }
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值