ปัญหา
ฟังก์ชัน JavaScript ที่รับช่วงสองอาร์เรย์ arr1 และ arr2 ของช่วงเวลาที่ไม่ปะติดปะต่อแบบคู่และเรียงตามลำดับ
ช่วงปิด [a, b] (กับ a <=b) หมายถึงเซตของจำนวนจริง x ที่มี a <=x <=b.
จุดตัดของช่วงปิดสองช่วงคือชุดของจำนวนจริงที่ว่างหรือสามารถแสดงเป็นช่วงปิดได้ ตัวอย่างเช่น จุดตัดของ [1, 3] และ [2, 4] คือ [2, 3]) ฟังก์ชันของเราควรจะส่งคืนจุดตัดของอาร์เรย์ช่วงเวลาทั้งสองนี้
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr1 = [[0,2],[5,10],[13,23],[24,25]]; const arr2 = [[1,5],[8,12],[15,24],[25,26]];
จากนั้นผลลัพธ์ควรเป็น −
const output = [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]];
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr1 = [[0,2],[5,10],[13,23],[24,25]]; const arr2 = [[1,5],[8,12],[15,24],[25,26]]; const findIntersection = function (A, B) { const res = [] let i = 0 let j = 0 while (i < A.length && j < B.length) { const [a, b] = A[i] const [c, d] = B[j] const lo = Math.max(a, c) const hi = Math.min(b, d) if (lo <= hi) { res.push([Math.max(a, c), Math.min(b, d)]) } if (b < d) { i++ } else { j++ } } return res }; console.log(findIntersection(arr1, arr2));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
[ [ 1, 2 ], [ 5, 5 ], [ 8, 10 ], [ 15, 23 ], [ 24, 24 ], [ 25, 25 ] ]