代码实现
把this.arr数组中每一项数组简化为其start值,例如this.arr = [ [1,3] [3,5] ]简化为this.arr = [ 1 , 3 ],其中需要插入的值[2,4],简化为需要插入2,于是返回的index为1,如果满足了第一个数组end > 2,或者满足第二个数组的start < 4,则说明重叠了,于是返回false
var MyCalendar = function () {
this.arr = [];
};
MyCalendar.prototype.findInsertIndex = function (start) {
var left = 0;
var right = this.arr.length - 1;
while (left <= right) {
var mid = left + ((right - left) >> 1);
if (this.arr[mid][0] === start) {
return mid;
} else if (this.arr[mid][0] < start) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
};
MyCalendar.prototype.book = function (start, end) {
var index = this.findInsertIndex(start);
if (
(this.arr[index - 1] && start < this.arr[index - 1][1]) ||
(this.arr[index] && end > this.arr[index][0])
) {
return false;
}
this.arr.splice(index, 0, [start, end]);
return true;
};
流程图分析