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

Chèn một khoảng thời gian mới vào một mảng các khoảng thời gian được sắp xếp trong JavaScript

Với mục đích của câu hỏi này, chúng tôi định nghĩa một khoảng là một mảng gồm hai số trong đó số đầu tiên luôn nhỏ hơn số thứ hai.

Ví dụ -

[4, 6], [2, 3], [6, 8], [2, 7], [1, 8] are all examples of valid intervals.

Giả sử, chúng ta có một mảng các khoảng được sắp xếp theo thời gian bắt đầu của chúng (phần tử đầu tiên của mỗi khoảng).

Các khoảng trong mảng không chồng chéo, có nghĩa là đối với bất kỳ hai khoảng liền kề tùy ý nào,

[m, n], [x, y]
m < n < x < y

Do đó, một ví dụ như vậy về mảng khoảng thời gian này có thể là -

const arr = [[ 2, 4], [5, 7], [9, 10], [13, 17]];

Chúng tôi bắt buộc phải viết một hàm JavaScript lấy một mảng các khoảng như vậy làm đối số đầu tiên và một khoảng duy nhất làm đối số thứ hai.

Sau đó, hàm sẽ chèn khoảng thời gian vào đúng vị trí của nó trong mảng, duy trì thuộc tính nonoverlapping của mảng.

Nếu được yêu cầu, chúng ta có thể hợp nhất hai hoặc nhiều khoảng trong mảng để giữ cho các khoảng không chồng chéo lên nhau.

Ví dụ:nếu đối với mảng khoảng thời gian ở trên, khoảng thời gian chúng ta cần chèn là [6, 13] thì kết quả đầu ra sẽ giống như -

const output = [[2, 4], [5, 17]];

Ví dụ

Sau đây là mã -

const arr = [[2, 4], [5, 7], [9, 10], [13, 17]];
const interval = [6, 13];
const insertWithin = (arr = [], interval = []) => {
   const res = [];
   let ind = 0;
   while (arr[ind] && arr[ind][1] < interval[0]) {
      res.push(arr[ind]);
      ++ind;
   };
   let start = interval[0];
   let end = interval[1];
   while (arr[ind] && arr[ind][0] <= interval[1]) {
      start = Math.min(start, arr[ind][0]);
      end = Math.max(end, arr[ind][1]);
      ++ind;
   }
   res.push([start, end]);
   while (arr[ind]) {
      res.push(arr[ind]);
      ++ind;
   }
   return res;
};
console.log(insertWithin(arr, interval));

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

[[2, 4], [5, 17]]