C++ 中使所有数组元素相等的最小操作数


问题陈述

给定一个包含 n 个正整数的数组。我们需要找出使所有元素都相等的最少操作数。我们可以在数组元素上执行加法、乘法、减法或除法操作。

示例

如果输入数组为 = {1, 2, 3, 4},则我们需要最少 3 次操作才能使所有元素相等。例如,我们可以通过执行 3 次加法使元素变为 4。

算法

1. Select element with maximum frequency. Let us call it ‘x’ 
2. Now we have to perform n-x operations as there are x element with same value

示例

 实际演示

#include <bits/stdc++.h>
using namespace std;
int getMinOperations(int *arr, int n) {
   unordered_map<int, int> hash;
   for (int i = 0;i < n; ++i) {
      hash[arr[i]]++;
   }
int maxFrequency = 0;
   for (auto elem : hash) {
      if (elem.second > maxFrequency) {
         maxFrequency = elem.second;
      }
   }
   return (n - maxFrequency);
}
int main() {
   int arr[] = {1, 2, 3, 4};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum required operations = " <<
   getMinOperations(arr, n) << endl;
   return 0;
}

当你编译并执行上述程序时,它会生成以下输出

输出

Minimum required operations = 3

更新日期:2019 年 12 月 23 日

2K+ 浏览量

开启您的职业

通过完成课程获得认证

GET STARTED 开始
广告