以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(intarr[],intsize)获取数组及其长度,并返回后缀递增/递减操作的计数以构造给定的数组
将初始计数设为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