在 C++ 中查詢使所有陣列元素相等所需的運算次數
在這個問題中,我們給定一個大小為 n 的陣列 arr。我們的任務是*查詢使所有陣列元素相等所需的運算次數*
該運算定義為*將具有最大權重的元素的相等權重分配給陣列的所有元素*。
如果無法使陣列元素相等,則列印 -1。
讓我們來看一個例子來理解這個問題。
Input : arr[] = {7, 3, 3, 3} Output : 3
解釋
分配後的陣列為 {4, 4, 4, 4}
解決方案方法
解決這個問題的一個簡單方法是找到陣列的最大值。然後使用這個最大值檢查陣列的所有元素是否相等,並且該值是否等於從陣列的最大值中減去 n(或其倍數)。如果是,則返回 n;如果不是,則返回 -1(表示不可行)。
示例
讓我們來看一個例子來理解這個問題
#include<bits/stdc++.h> using namespace std; int findOperationCount(int arr[],int n){ int j = 0, operations = 0; int maxVal = arr[0]; int minVal = arr[0]; int maxValInd = 0; for (int i = 1; i < n; i++){ if(arr[i] > maxVal){ maxVal = arr[i]; maxValInd = i; } if(arr[i] < minVal){ minVal = arr[i]; } } for (int i =0;i<n;i++){ if (arr[i] != maxVal && arr[i] <= minVal && arr[i] != 0){ arr[j] += 1; arr[maxValInd] -= 1; maxVal -= 1; operations += 1; j += 1; } else if (arr[i] != 0){ j += 1; } } for (int i = 0; i < n; i++){ if (arr[i] != maxVal){ operations = -1; break; } } return operations; } int main(){ int arr[] = {4, 4, 8, 4}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"The number of operations required to make all array elements Equal is "<<findOperationCount(arr, n); return 0; }
輸出
The number of operations required to make all array elements Equal is 3
廣告