समस्या कथन
n धनात्मक पूर्णांकों वाली एक सरणी दी गई है। हमें सभी तत्वों को बराबर बनाने के लिए न्यूनतम ऑपरेशन की संख्या ज्ञात करनी है। हम सरणी तत्व पर किसी भी तत्व के साथ जोड़, गुणा, घटाव या भाग कर सकते हैं।
उदाहरण
यदि इनपुट सरणी = {1, 2, 3, 4} है तो हमें सभी तत्वों को बराबर बनाने के लिए न्यूनतम 3 ऑपरेशन की आवश्यकता है। उदाहरण के लिए, हम 3 जोड़ करके तत्वों को 4 बना सकते हैं।
एल्गोरिदम
1. अधिकतम आवृत्ति वाले तत्व का चयन करें। इसे 'x' कहते हैं 2. अब हमें n-x ऑपरेशन करने होंगे क्योंकि x तत्व समान मान वाले हैं
उदाहरण
#include <bits/stdc++.h> using namespace std; int getMinOperations(int *arr, int n) { unordered_map<int, int> hash; for (int i = 0;i < n; ++i) { hash[arr[i]]++; } int maxFrequency = 0; for (auto elem : hash) { if (elem.second > maxFrequency) { maxFrequency = elem.second; } } return (n - maxFrequency); } int main() { int arr[] = {1, 2, 3, 4}; int n = sizeof(arr) / sizeof(arr[0]); cout << "न्यूनतम आवश्यक ऑपरेशन = " << getMinOperations(arr, n) << endl; return 0; }जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है:
आउटपुट
न्यूनतम आवश्यक ऑपरेशन = 3