Составьте наибольшее число из набора целых чисел. Набор целых чисел может быть больше 1 цифры.
Так как числа могут быть больше чем одна цифра, использование жадного алгоритма и сортировка их в порядке убывания не помогут.
Например: вход: 21 и 2,
Сортировка по убыванию дала бы ответ 212, что неверно, поскольку 221> 212
Я решил придумать следующий алгоритм:
У меня есть вектор строк в качестве входных данных, поэтому я использую функцию std :: sort с пользовательской функцией для его сортировки.
Если у меня есть две строки i = "21" и j = "2", я объединяю i, j и j, i, а затем сравниваю результат
bool isGreater(string i,string j){
string a = i+j;
string b = j+i;
return a >= b;
}
string largest_number(vector<string> a) {
string result =" ";
sort (a.begin(),a.end(),isGreater);
for(int i =0; i<a.size(); i++){
result+=a[i];
}
return result;
}
В некоторых случаях это работает, но я провалю несколько тестовых случаев и получаю сообщение:
STDERR:
прекращение вызова после создания экземпляра 'std :: logic_error'
what (): basic_string :: _ M_construct null недействительно
Ценю любую помощь.