Недавно я увидел этот код Javascript в StackOverflow для объединения двух массивов и удаления дубликатов:
Array.prototype.unique = function() {
var a = this.concat();
for(var i=0; i<a.length; ++i) {
for(var j=i+1; j<a.length; ++j) {
if(a[i] === a[j])
a.splice(j--, 1);
}
}
return a;
};
var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
var array3 = array1.concat(array2).unique();
Хотя этот код работает, он ужасно неэффективен ( O(n^2)
). Ваша задача - создать алгоритм с меньшей сложностью.
Критерием выигрыша является решение с наименьшей сложностью , но связи будут разорваны по кратчайшей длине символов.
Требования :
Упакуйте весь ваш код в функцию, которая отвечает следующим требованиям «правильности»:
- Вход: два массива
- Выход: один массив
- Объединяет элементы обоих массивов вместе. Любой элемент в любом входном массиве должен быть в выходном массиве.
- Выводимый массив не должен иметь дубликатов.
- Заказ не имеет значения (в отличие от оригинала)
- Любой язык имеет значение
- Не используйте функции массивов стандартной библиотеки для обнаружения уникальности или объединения наборов / массивов (хотя в стандартной библиотеке все в порядке). Позвольте мне сделать различие, что конкатенация массива - это хорошо, но функции, которые уже выполняют все вышеперечисленное, - нет.
[1, 2, 2, 3]
и [2, 3, 4]
возврат [1, 2, 2, 3, 4]
или [1, 2, 3, 4]
?