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
-
C++で配列のすべての要素を同じにするための最小限の削除操作。
問題の説明 要素が繰り返されるようなn個の要素の配列が与えられます。配列から任意の数の要素を削除できます。タスクは、配列から削除する要素の最小数を見つけて、配列を等しくすることです。 arr[] = {10, 8, 10, 7, 10, -1, -4, 12} すべての配列要素を同じにするには、強調表示された5つの要素を削除する必要があります。 アルゴリズム 1. Count frequency of each element 2. Find maximum frequecy among the frequencies. Let us call this as maxFrequncy 3.
-
Pythonですべての配列要素を等しくするために必要な操作の数
要素の配列を指定しました。要素を1ずつインクリメントして、すべてを等しくする必要があります。各ステップでn-1個の要素をインクリメントできます。私たちの目標は、すべての配列要素を等しくするために必要な操作の総数を計算することです。 たとえば、リスト[1、2、3]を取得する場合、すべての要素を等しくするために3つの操作が必要でした。この問題の1つの解決策はです。各ステップで最上位の数字を見つけ、残りの要素を1ずつ増やします。コードを書いてみましょう。 例 def main(): # intializing the array arr = [1,