Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมสร้างเลข Lexicographic ใหญ่ที่สุดจากรายการตัวเลขใน C++

สมมติว่าเรามีรายการตัวเลขชื่อ 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