我最近在StackOverflow上看到了以下Javascript代码,用于合并两个数组,并删除重复项:
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]
?