在 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP