用 C++ 构建给定数组所需的后缀增量/减量操作次数


给定一个包含正整数的目标数组 arr[]。目标是用一个初始数组(所有元素都为 0)构建目标数组 arr[]。可以在一个所有元素都为 0 的空数组上应用的操作是后缀增量/减量操作。

如果我们选择任何索引 i,则在后缀增量操作的情况下,我们将从索引 i 到最后一个索引的所有元素加 1。

在后缀减量操作的情况下,我们将从索引 i 到最后一个索引的所有元素减 1。

让我们通过示例来理解

输入 − arr[]= { 1,2,3 }

输出 − 构建给定数组所需的后缀增量/减量操作次数为 3

解释 

Starting from { 0, 0, 0 }
Choose index 0, applying suffix increment { 1, 1, 1 }
Choose index 1, applying suffix increment { 1, 2, 2 }
Choose index 2, applying suffix increment { 1, 2, 3 }
Total operations =3

输入 − arr[]= { 1, 4, 5, 3 }

输出 − 构建给定数组所需的后缀增量/减量操作次数为 7

解释 

Starting from { 0, 0, 0, 0 }
Choose index 0, applying suffix increment { 1, 1, 1, 1 }
Choose index 1, applying suffix increment { 1, 2, 2, 2 }
Choose index 1, applying suffix increment { 1, 3, 3, 3 }
Choose index 1, applying suffix increment { 1, 4, 4, 4 }
Choose index 2, applying suffix increment { 1, 4, 5, 5 }
Choose index 3, applying suffix decrement { 1, 4, 5, 4 }
Choose index 3, applying suffix decrement { 1, 4, 5, 3 }
Total operations = 7

下面程序中使用的方案如下

如果我们将初始数组作为 B[ ]。要使第一个元素 B[0] 等于 arr[0]。我们将需要 arr[0] 次后缀增量操作。在此之后,所有 B[0]=B[1]....=B[n-1]=arr[0] 将相等。

要使第二个元素 B[1] 等于 arr[1],我们将需要 | arr[1]-arr[0] | 次操作。(增量或减量)。

因此,要使 B[i] 等于 arr[i],我们将需要 | arr[i]- arr[i-1] | 次操作。

操作的总数将为 | arr[0] | + | arr[1]-arr[0] | + …. + | arr[n-1]-arr[n-2] |。

  • 将目标数组作为 arr[]。

  • 函数 incr_decr_op(int arr[], int size) 获取数组及其长度,并返回构建给定数组所需的后缀增量/减量操作的次数

  • 将初始计数设为 0。

  • 使用 for 循环遍历数组 arr[]

  • 对于索引 0,将 arr[i] 加到计数中。

  • 对于其他索引,将 abs( arr[i]-arr[i-1] ) 加到计数中。

  • 在 for 循环结束时,返回计数作为结果。

示例

 实时演示

#include <bits/stdc++.h>
using namespace std;
int incr_decr_op(int arr[], int size){
   int count = 0;
   for (int i = 0; i < size; i++){
      if (i > 0){
         count += abs(arr[i] - arr[i - 1]);
      }
      else{
         count = count + abs(arr[i]);
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 3, 1, 2, 2 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of suffix increment/decrement operations to construct a given array are: "<<incr_decr_op(arr, size) << endl;
}

输出

如果我们运行以上代码,它将生成以下输出:

Count of suffix increment/decrement operations to construct a given array are: 6

更新于: 2020-12-03

117 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告