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

Tìm giao điểm của các mảng chuỗi - 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, giả sử là 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 bất kỳ thứ tự nào. 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 đầu vào là -

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];

Sau đó, đầu ra phải là -

Output: ['world', 'you'];

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 việc ban đầu cả hai đều trỏ đến 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 cách tiếp cận 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 giao nhau. Điều này sẽ tiêu tốn của chúng tôi O (n ^ 2) thời gian.

Ví dụ

Sau đây là mã -

arr1 = ['hello', 'world', 'how', 'are', 'you'];
arr2 = ['hey', 'world', 'can', 'you', 'rotate'];
const intersectElements = (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(intersectElements(arr1, arr2));

Đầu ra

Điều này sẽ tạo ra kết quả sau trong bảng điều khiển -

[ 'world', 'you' ]