मान लीजिए कि हमारे पास अंकों की एक सरणी है। हमें वह अधिकतम संख्या ज्ञात करनी है जो सरणी के सभी अंकों का उपयोग करके प्राप्त की जा सकती है। तो अगर सरणी [3, 3, 9, 6, 2, 5] की तरह है, तो अधिकतम संख्या 965332 हो सकती है।
समस्या से, हम देख सकते हैं कि हम अंकों को गैर-बढ़ते क्रम में आसानी से सॉर्ट कर सकते हैं, फिर उन्हें प्रिंट कर सकते हैं। लेकिन हम इसे और अधिक कुशल तरीके से हल कर सकते हैं। हम प्रत्येक अंक की आवृत्ति को स्टोर करने के लिए आकार 10 की एक सरणी बना सकते हैं, फिर उसके अनुसार 9 से 0 तक की संख्याओं को प्रिंट कर सकते हैं।
उदाहरण
#include <iostream> #include <string> using namespace std; int maxNumFromNum(int arr[], int n) { int freq[10] = {0}; for (int i=0; i<n; i++) freq[arr[i]]++; int res = 0, mul = 1; for (int i = 0; i <= 9; i++) { while (freq[i] > 0) { res = res + (i * mul); freq[i]--; mul = mul * 10; } } return res; } int main() { int digits[] = {3, 3, 9, 6, 2, 5}; int n = sizeof(digits)/sizeof(digits[0]); cout << "Maximum number: " << maxNumFromNum(digits, n); }
आउटपुट
Maximum number: 965332