Computer >> Máy Tính >  >> Lập trình >> Javascript

Giao điểm của hai mảng JavaScript

Chúng ta có hai mảng Numbers và chúng ta bắt buộc phải viết một hàm, chẳng hạn như giao điểm () tính toán phần giao nhau của chúng và trả về một mảng có chứa các phần tử giao nhau theo thứ tự bất kỳ. Mỗi phần tử trong kết quả phải xuất hiện nhiều lần như nó hiển thị trong cả hai mảng.

Ví dụ - Nếu,

Input: arr1 = [1,2,3,1], arr2 = [1,3,1]
Output: [1,3,1]

Phương pháp tiếp cận

Nếu các mảng được sắp xếp, chúng ta có thể sử dụng phương pháp tiếp cận hai con trỏ với ban đầu cả hai trỏ về 0 ở đầu mảng tương ứng và chúng ta có thể tiếp tục tăng con trỏ tương ứng và đó sẽ là phức hợp O (m + n) w.r.t. thời gian trong đó m và n là kích thước của mảng.

Nhưng vì chúng ta chưa sắp xếp các mảng nên không có logic nào trong việc sắp xếp các mảng và sau đó sử dụng ứng dụng này, chúng ta sẽ kiểm tra mọi giá trị của giá trị đầu tiên so với giá trị thứ hai và xây dựng một mảng xen kẽ. Điều này sẽ tiêu tốn của chúng tôi O (n ^ 2) thời gian.

Và mã để làm điều này sẽ là -

Ví dụ

const arr1 = [1, 2, 43, 5, 3, 7, 7,8, 4, 2];
const arr2 = [1, 1, 6, 6, 2, 78, 7, 2, 3, 7, 23, 5, 3];
const intersection = (arr1, arr2) => {
   const res = [];
   const { length: len1 } = arr1;
   const { length: len2 } = arr2;
   const smaller = (len1 < len2 ? arr1 : arr2).slice();
   const bigger = (len1 >= len2 ? arr1 : arr2).slice();
   for(let i = 0; i < smaller.length; i++){
      if(bigger.indexOf(smaller[i]) !== -1){
         res.push(smaller[i]);
         bigger.splice(bigger.indexOf(smaller[i]), 1, undefined);
      }
   };
   return res;
};
console.log(intersection(arr1 ,arr2));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[1, 2, 5, 3, 7, 7, 2]