kamacoder 58
题目描述
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。
输入描述
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。
输出描述
输出每个指定区间内元素的总和。
输入示例
输出示例
提示信息
数据范围:
0 < n <= 100000
思路
前缀和

为降低时间复杂度,在读入数组时直接保存前缀和,获得区间a、b后直接输出 vec[b]-vec[a-1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); int[] vec = new int[n]; int[] p = new int[n];
int presum = 0; for (int i = 0; i < n; i++) { vec[i] = scanner.nextInt(); presum += vec[i]; p[i] = presum; }
while (scanner.hasNextInt()) { int a = scanner.nextInt(); int b = scanner.nextInt();
int sum; if (a == 0) { sum = p[b]; } else { sum = p[b] - p[a - 1]; } System.out.println(sum); }
scanner.close(); } }
|