首页  >  文章  >  后端开发  >  在 C++ 中的范围求和查询后从给定数组中查找初始数组

在 C++ 中的范围求和查询后从给定数组中查找初始数组

PHPz
PHPz转载
2023-09-17 17:09:022681浏览

在 C++ 中的范围求和查询后从给定数组中查找初始数组

在这个问题中,我们得到一个大小为 N 的数组 res[]。我们的任务是在范围求和查询后从给定数组中找到初始数组。

我们需要找到起始数组,在对其执行 [s, e, val] 查询时将返回数组 rel[]。

每个 [s, e, val] 查询的解决方式为

s -> 起始索引

e -> 结束索引

val -> 更新要添加到数组中从 s 到 e 的每个元素的值。

让我们举个例子来理解这个问题,
Input : rel[] = {7, 4, 8}
Query[][] = {{1, 2, 1},
{0, 1, 3}}
Output : {4, 0, 7}

Explanation

的翻译为:

Explanation

initialArray = {4, 0, 7}; query = {1, 2, 1}; finalArray = {4, 1, 8}
initialArray = {4, 1, 8}; query = {0, 1, 3}; finalArray = {7, 4, 8}

解决方案

解决问题的简单方法是遍历所有查询,对于所有查询使用我们解决问题的方式进行解决,然后在最后返回找到的数组。在这里,为了找到初始数组,我们需要以相反的方式对其进行操作,即从给定数组中减去它。

示例

程序示例以说明我们解决方案的工作原理

#include <iostream>
using namespace std;
void calcInitialArrayQueries(int arr[], int n, int query[][3], int q) {
   for (int i = 0; i < q; i++) {
      for (int j = query[i][0];j <= query[i][1]; j++) {
         arr[j] = arr[j] - query[i][2];
      }
   }
   for (int i = 0; i < n; i++)
      cout<<arr[i]<<" ";
}
int main() {
   int arr[] = { 5, 1, 8, 2, 9};
   int n = sizeof(arr) / sizeof(arr[0]);
   int query[][3] = { {0, 2, -2}, {1, 4, 3}};
   int q = sizeof(query) / sizeof(query[0]);
   cout<<"Initial array : "; calcInitialArrayQueries(arr, n, query, q);
   return 0;
}

输出

Initial array : 7 0 7 -1 6

以上是在 C++ 中的范围求和查询后从给定数组中查找初始数组的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除