ฉันเพิ่งเห็นรหัส 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]
?