Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Loại bỏ khoảng thời gian đã bao phủ trong JavaScript

Mô tả vấn đề

Hàm JavaScript nhận vào mảng 2D arr làm đối số duy nhất. Mỗi mảng con là cặp 2 số chỉ định khoảng thời gian.

Hàm phải loại bỏ tất cả khoảng thời gian bị bao phủ bởi khoảng khác trong mảng. Khoảng [a,b) bị [c,d) bao phủ nếu c ≤ a và b ≤ d. Hàm trả về số khoảng còn lại.

Ví dụ, nếu đầu vào là:

const arr = [ 
  [2, 5], 
  [5, 7], 
  [3, 9] 
];

Thì đầu ra nên là:

const output = 2;

Giải thích đầu ra

Khoảng [5, 7] bị [3, 9] bao phủ, nên bị loại bỏ.

Ví dụ minh họa

Mã thực hiện (sắp xếp + duyệt):

const arr = [ 
  [2, 5], 
  [5, 7], 
  [3, 9] 
]; 
const removeCovered = (arr = []) => { 
  arr.sort(([a, b], [c, d]) => (a === c ? d - b : a - c)); 
  let last = arr[0]; 
  let count = arr.length; 
  for(let i = 1; i < arr.length; i++){ 
    const [a, b] = last; 
    const [c, d] = arr[i]; 
    if(c >= a && d <= b){ 
      count -= 1; 
    }else{ 
      last = arr[i]; 
    }; 
  }; 
  return count; 
}; 
console.log(removeCovered(arr));

Đầu ra

Kết quả trong console sẽ là:

2