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

Tìm giao điểm của các mảng khoảng trong JavaScript

Vấn đề

Hàm JavaScript nhận trong hai mảng, arr1 và arr2 khoảng thời gian tách rời từng cặp và theo thứ tự được sắp xếp.

Một khoảng đóng [a, b] (với a <=b) biểu thị tập hợp các số thực x với a <=x <=b.

Giao điểm của hai khoảng đóng là tập hợp các số thực rỗng hoặc có thể được biểu diễn dưới dạng một khoảng đóng. Ví dụ:giao của [1, 3] và [2, 4] là [2, 3].) Hàm của chúng ta được cho là trả về giao của hai mảng khoảng này.

Ví dụ:nếu đầu vào của hàm là -

const arr1 = [[0,2],[5,10],[13,23],[24,25]];
const arr2 = [[1,5],[8,12],[15,24],[25,26]];

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

const output = [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]];

Ví dụ

Mã cho điều này sẽ là -

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

Đầu ra

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

[
   [ 1, 2 ],
   [ 5, 5 ],
   [ 8, 10 ],
   [ 15, 23 ],
   [ 24, 24 ],
   [ 25, 25 ] 
]