Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การหาจุดตัดของอาร์เรย์ของช่วงเวลาใน JavaScript


ปัญหา

ฟังก์ชัน 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 ] 
]