मान लीजिए हमारे पास अंकों का एक ऐरे है। हमें ऐरे के सभी अंकों का उपयोग करके प्राप्त की जा सकने वाली अधिकतम संख्या खोजनी है। तो यदि ऐरे [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