สมมติว่าเรามีรายการตัวเลขชื่อ nums เราต้องจัดเรียงลำดับใหม่เพื่อสร้างตัวเลขที่ใหญ่ที่สุดเป็นไปได้และคืนค่านั้นเป็นสตริง
ดังนั้น หากอินพุตเป็น nums = [20, 8, 85, 316] เอาต์พุตจะเป็น "88531620"
ในการแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดอาร์เรย์ temp
- สำหรับแต่ละรายการ i ใน nums:
- แทรก i ลงใน temp เป็นสตริง
- เรียงอาร์เรย์ temp ตามลำดับ lexicographic (ตรวจสอบสำหรับสตริงสองตัว a, b ว่า a ต่อ b ใหญ่กว่า b ต่อ a หรือไม่)
- สำหรับแต่ละสตริง s ใน temp:
- res := res ต่อ s
- คืนค่า res
ตัวอย่างโค้ด
#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