Я только что написал свой экзамен, и один из вопросов хотел, чтобы мы получили объединение A [] размера N и B [] размера N и удалили дубликаты (A и B могут иметь дубликаты внутри себя) и поместили их в Z [ ] размер 2N. Мы просто попросили псевдокод для этого, но это класс C ++.
Нас попросили сделать две версии этой версии без использования пространства кучи (без создания новых массивов или структур данных, кроме локальных переменных с постоянным временем), а другая не имела ограничений. Кроме того, оба, чтобы быть самым быстрым возможным временем выполнения.
Тот, с ограничениями, который я смог сделать только O (N ^ 2) с гнездом для цикла и просто итерацией по Z [], когда я помещал элементы в Z из A и B.
Это был тот, кого меня больше интересовало мнение вашего парня / что бы вы сделали (для безлимитного):
Я получил следующее (Время выполнения O (NlogN)):
Создание массива E размером 2N
Поместите все из A и B в E - O (N)
Объединить сортировку E // Использовать ascii для сортировки - O (NlogN) * 1013 *
String previous
for loop from i = 0 to sizeOfE { - O(N)
if previous does not equal E[i] then add to Z[] and the string previous equals E[i] - O(1)
}
Это самый быстрый способ / это правильно? Как бы вы справились с этой проблемой?