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