এই সমস্যায়, আমাদের n আকারের একটি অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল সমস্ত অ্যারের উপাদানগুলিকে সমান করতে প্রয়োজনীয় ক্রিয়াকলাপগুলির সংখ্যা খুঁজে বের করা৷
অপারেশনটিকে অ্যারের সমস্ত উপাদানগুলিতে সর্বাধিক ওজন সহ উপাদান থেকে সমান ওজনের বিতরণ হিসাবে সংজ্ঞায়িত করা হয় .
অ্যারে উপাদান সমান করা সম্ভব না হলে, প্রিন্ট -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