我们给了一个包含正整数的目标数组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