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