इस समस्या में, हमें आकार n की एक सरणी arr दी गई है। हमारा कार्य सभी सरणी तत्वों को समान बनाने के लिए आवश्यक ऑपरेशनों की संख्या ज्ञात करना है।
ऑपरेशन को अधिकतम वजन वाले तत्व से सरणी के सभी तत्वों को समान वजन वितरित करना परिभाषित किया गया है।
यदि सरणी तत्वों को समान बनाना संभव नहीं है, तो -1 प्रिंट करें।
उदाहरण से समझते हैं:
इनपुट: arr[] = {7, 3, 3, 3} आउटपुट: 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