僅使用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 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.