इस समस्या में, हमें आकार 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