Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Intersection ของสองอาร์เรย์ใน JavaScript


เรามีสองอาร์เรย์ของตัวเลข และต้องเขียนฟังก์ชัน เช่น intersection() ที่คำนวณ intersection ของพวกเขาและคืนค่าอาร์เรย์ที่มีองค์ประกอบที่ intersect ในลำดับไหนก็ได้ แต่ละองค์ประกอบในผลลัพธ์ควรปรากฏหลายครั้งเท่ากับที่มันแสดงในทั้งสองอาร์เรย์

ตัวอย่าง − ถ้า

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

วิธีการ

ถ้าอาร์เรย์ถูกจัดเรียงแล้ว เราอาจใช้ two pointer approach ที่ชี้ที่ 0 เริ่มต้นของอาร์เรย์แต่ละอันและดำเนินต่อด้วยการเพิ่ม pointer ที่สอดคล้องและนั่นจะเป็น O(m+n) complex ว่าด้วยเวลา โดย m และ n คือขนาดอาร์เรย์

แต่เพราะเรามีอาร์เรย์ที่ไม่ได้จัดเรียง ไม่มีเหตุผลที่จะจัดเรียงอาร์เรย์แล้วใช้วิธีนี้ เราจะตรวจสอบทุกค่าของอันแรกกับอันที่สองและสร้าง intersection array นี้จะใช้เวลา O(n^2)

และโค้ดสำหรับทำนี้จะเป็น −

ตัวอย่าง

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));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้

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