मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें सबसे बड़ी संभव संख्या बनाने के लिए इसके क्रम को पुनर्व्यवस्थित करना होगा और इसे एक स्ट्रिंग के रूप में वापस करना होगा।
इसलिए, अगर इनपुट nums =[20, 8, 85, 316] जैसा है, तो आउटपुट "88531620" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक सरणी अस्थायी परिभाषित करें
- प्रत्येक आइटम के लिए मैं अंकों में:
- अस्थायी में स्ट्रिंग के रूप में i डालें
- लेक्सिकोग्राफिक अनुक्रम के आधार पर सरणी अस्थायी को सॉर्ट करें (दो स्ट्रिंग्स ए, बी की जांच करें जब एक कॉन्टेनेट बी बी कॉन्टेनेट ए या नहीं से बड़ा हो)
- अस्थायी में प्रत्येक स्ट्रिंग के लिए:
- res :=res concatenate s
- रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; static bool cmp(string a, string b) { return (a + b) >= (b + a); } string solve(vector<int>& nums) { vector<string> temp; for (int i : nums) { temp.push_back(to_string(i)); } sort(temp.begin(), temp.end(), cmp); string res; for (string s : temp) { res += s; } return res; } int main(){ vector<int> v = {20, 8, 85, 316}; cout << solve(v); }
इनपुट
{20, 8, 85, 316}
आउटपुट
88531620