维护一个数组,每次有新的日程安排时,先判断当前日程是否会产生重复日程:如果产生直接返回false;不产生的话,加新日程加入数组中,同时返回true
判断方法的话:用当前日程时间[curStartTime, curEndTime]与数组中维护的所有已有日程做比对:
假设已有日程队列中有一个日程时间为[aStartTime, aEndTime],满足下面两点即没有交集,即没有重复预定
- 当前日程的开始时间大于等于队列中的每个日程的结束时间,即
curStartTime >= aEndTime - 前日程的结束时间小于等于队列中的每个日程的开始时间,即
curEndTime <= aStartTime
代码
class MyCalendar {
public data: [number, number][]
constructor() {
this.data = []
}
book(start: number, end: number): boolean {
// 当前没有日程
if (this.data.length === 0) {
this.data.push([start, end])
return true
}
// 加入没有交集
let isMixed = false
for (let i = 0; i < this.data.length; i++) {
const cur = this.data[i]
// 如果要保证不存在交集,不产生重复日程
if (!(cur[0] >= end || cur[1] <= start)) {
isMixed = true
break
}
}
// 重复返回false 不重复加入日程同时返回true
if (isMixed) {
return false
} else {
this.data.push([start, end])
return true
}
}
}