Son zamanlarda iki dizileri birleştirmek ve yinelenenleri kaldırmak için StackOverflow bu Javascript kodunu gördüm :
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();
Bu kod çalışırken korkunç bir şekilde verimsizdir ( O(n^2)
). Zorluğunuz daha az karmaşıklığa sahip bir algoritma oluşturmaktır.
Kazanan kriterler en az karmaşıklığa sahip çözümdür , ancak bağlar karakterlerde en kısa uzunlukta kırılacaktır.
Gereksinimler :
Tüm kodunuzu, "doğruluk" için aşağıdaki gereksinimleri karşılayan bir işlevde paketleyin:
- Girdi: İki dizi
- Çıktı: Bir dizi
- Her iki dizinin öğelerini bir araya getirir- Her iki giriş dizisindeki herhangi bir öğe, çıkış dizisinde olmalıdır.
- Çıktı dizisinin yinelenmesi olmamalıdır.
- Sipariş önemli değil (orijinalin aksine)
- Herhangi bir dil önemlidir
- Tekliği veya kümeleri / dizileri birleştirmek için standart kitaplığın dizi işlevlerini kullanmayın (standart kitaplıktaki diğer şeyler iyi olsa da). Dizi birleştirmenin iyi olduğunu ayırt edeyim, ancak yukarıdakilerin tümünü zaten yapan işlevler iyi değil.
[1, 2, 2, 3]
ve [2, 3, 4]
iade [1, 2, 2, 3, 4]
ya [1, 2, 3, 4]
?