仅使用C++中的数组元素来均衡数组


在这个问题中,我们得到一个包含n个元素的数组。我们的任务是创建一个程序来计算使用仅数组元素来均衡数组的操作次数。

我们需要计算为了使数组的所有元素相等而执行的加法或减法操作的次数。

让我们来看一个例子来理解这个问题:

输入:arr[] = {4, 0, 3, 1, 2}

输出:3

解释:

相等的值将是2。

总和将保持不变。我们将从arr[3]的值中减去1,然后将其添加到arr[1]的值中。

然后,我们将从arr[0]的值中减去2,并将其添加到arr[1]的值中。

解决方案方法

解决这个问题的一个简单方法是从数组中找到一个元素,将其作为数组的相等元素。

我们将通过查找平均值来检查操作是否可行,如果它是整数,则均衡是可能的,否则不可能。

如果均衡是可能的,我们将计算所需的操作次数,然后返回它。操作次数等于所有数字与平均值之间的绝对差之和的一半。

算法

步骤1:找到数组所有元素的平均值。

步骤2:如果平均值不是整数,则返回-1,表示均衡不可能。

步骤3:否则,找到所有元素与平均值之间的绝对差。

步骤4:返回平均值的一半。

程序说明了我们解决方案的工作原理:

示例

在线演示

#include <bits/stdc++.h>
using namespace std;

int calcEqualisedOperations(int arr[], int n) {
   
   int sum = 0, average, operations = 0;
   for (int i = 0; i < n; i++)
      sum += arr[i];
   if (sum % n != 0)
      return -1;
   average = sum/n;
   for (int i = 0; i < n; i++)
      operations += ( abs(arr[i] - average) / 2 );

   return operations;
}

int main() {

   int arr[] = { 5, 3, 2, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Operations required to equalize an array using array elements is "<<calcEqualisedOperations(arr, n);
   return 0;
}

输出:

Operations required to equalize an array using array elements is 2

更新于:2021年1月22日

366 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告