无更新的范围和查询的 C++ 程序?
我们需要计算从索引 i 到索引 j 的元素之和。由 i 和 j 索引值组成的查询将被多次执行。
Input:arr[] = {5, 6, 3, 4, 1 } i = 1, j =3 Output: 13
解释
6 + 3 + 4 = 13 sum[] = {5, 6+5, 3+6+5, 4+3+6+5, 1+4+3+6+5 } sum[]={5,11,14,18,19} sum[j]-sum[i-1]=sum[3]-sum[1-1]= sum[3]-sum[0]=18-5=13
此处的逻辑非常基本,先从 i 索引开始循环到 j 索引,总结这些索引之间的元素。但无法将这些元素存储在额外的变量中,因此我们将使用另一个数组,在该数组中将数组元素与最后一个数组元素相加,然后从 i 索引减去 j 索引的值;
示例
#include <iostream> using namespace std; int rangeSum(int i, int j, int sum[]) { if (i == 0) return sum[j]; return sum[j] - sum[i - 1]; } int main() { int arr[] = { 5, 6, 3, 4, 1 }; int n=5; int sum[5]; sum[0] = arr[0]; for (int i = 1; i < n; i++) { sum[i] = arr[i] + sum[i - 1]; } cout << rangeSum(1, 3, sum) << endl; return 0; }
输出
13
广告