算法思路:
1. 對原始時間段進行排序,按照開始時間從小到大排序;
2. 從第二個時間段開始,判斷當前時間段的開始時間是否在前面的時間段內,如果是則表示時間段沖突,跳過該時間段繼續向后掃描,否則保存該時間段,并將該時間段設置成當前時間段;
3. 重復步驟2,直到掃描完所有的時間段。
示例代碼:
function isTimeConflict(arr) {
if (arr.length <= 1) {
return false;
}
// 按照開始時間從小到大排序
arr.sort((a, b) => a.start - b.start);
let i = 1;
let cur = arr[0];
while (i < arr.length) {
const next = arr[i];
if (next.start >= cur.start && next.start <= cur.end) {
// 時間段沖突,繼續往后掃描
cur = { start: cur.start, end: Math.max(cur.end, next.end) };
} else {
// 保存該時間段,并將該時間段設置成當前時間段
cur = next;
}
i++;
}
return true;
}
// 測試用例
const arr = [
{ start: 1, end: 4 },
{ start: 2, end: 5 },
{ start: 7, end: 8 },
];
console.log(isTimeConflict(arr)); // true
const arr2 = [
{ start: 1, end: 4 },
{ start: 5, end: 9 },
{ start: 7, end: 8 },
];
console.log(isTimeConflict(arr2)); // false
時間復雜度:O(nlogn),主要是排序的時間復雜度。