Gần đây tôi đã thấy mã Javascript này trên StackOverflow để hợp nhất hai mảng và xóa các bản sao:
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();
Trong khi mã này hoạt động, nó không hiệu quả khủng khiếp ( O(n^2)
). Thách thức của bạn là tạo ra một thuật toán với độ phức tạp ít hơn.
Các tiêu chí chiến thắng là giải pháp có độ phức tạp ít nhất , nhưng các mối quan hệ sẽ bị phá vỡ bởi độ dài ngắn nhất trong các ký tự.
Yêu cầu :
Gói tất cả mã của bạn lại với nhau trong một hàm đáp ứng các yêu cầu sau về "tính chính xác:"
- Đầu vào: Hai mảng
- Đầu ra: Một mảng
- Hợp nhất các phần tử của cả hai mảng với nhau - Bất kỳ phần tử nào trong một trong hai mảng đầu vào phải nằm trong mảng xuất ra.
- Mảng xuất ra không có bản sao.
- Thứ tự không quan trọng (không giống như bản gốc)
- Bất kỳ ngôn ngữ nào
- Không sử dụng các hàm mảng của thư viện chuẩn để phát hiện tính duy nhất hoặc hợp nhất các bộ / mảng (mặc dù những thứ khác từ thư viện chuẩn vẫn ổn). Hãy để tôi phân biệt rằng nối mảng là tốt, nhưng các hàm đã làm tất cả các điều trên thì không.
[1, 2, 2, 3]
và [2, 3, 4]
trả lại[1, 2, 2, 3, 4]
hay [1, 2, 3, 4]
?