You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
varMyCalendarTwo=function(){this.map={};};/** * @param {number} start * @param {number} end * @return {boolean} */MyCalendarTwo.prototype.book=function(start,end){this.map[start]=(this.map[start]??0)+1;this.map[end]=(this.map[end]??0)-1;constvalues=Object.values(this.map);letcount=0;for(letvalueofvalues){count+=valueif(count>=3){this.map[start]-=1this.map[end]+=1returnfalse}}returntrue;};/** * Your MyCalendarTwo object will be instantiated and called as such: * var obj = new MyCalendarTwo() * var param_1 = obj.book(start,end) */
varMyCalendarThree=function(){this.map={};};/** * @param {number} startTime * @param {number} endTime * @return {number} */MyCalendarThree.prototype.book=function(startTime,endTime){this.map[startTime]=(this.map[startTime]??0)+1;this.map[endTime]=(this.map[endTime]??0)-1;constvalues=Object.values(this.map);letcount=0;letmax=0;for(letvalueofvalues){count+=valuemax=Math.max(count,max);}returnmax;};/** * Your MyCalendarThree object will be instantiated and called as such: * var obj = new MyCalendarThree() * var param_1 = obj.book(startTime,endTime) */
总结
差分数组是一个与原来数组具有相等长度的数组,其第i个位置的值,表示原数组中第i个位置值减去原数组第i-1个位置的值。简而言之,缓存了原数组中相同索引元素与其上一个元素的差。
1109. 航班预订统计
这道题是非常典型的差分数组,解法非常规矩,建立一个差分数组就好了。
不过需要注意一点,就是在处理
nums[right] -= 1
的时候,需要判断当前的right是否已经过n。1450. 在既定时间做作业的学生人数
这道题可以用差分,但是似乎也没必要。
直接判断 处于startime 和 endtime 之间的数就好了。
1094. 拼车
这道题也是用比较常规的差分数组来解决的。
需要注意的是,初始化数组时,可以给定个1001的长度,因为我们不知道right会是多大,但是不会超过1000.
731. 我的日程安排表 II
这道题需要利用map结构存储差分,而不是数组。
然后我们获取map的values,进行相加操作,相加过程如果发现和大于2,说明出现三重,则将本次添加的回退,然后返回false。
732. 我的日程安排表 III
这道题解法跟上道类似,反而简单了些,因为不用回退操作了。
1854. 人口最多的年份
这道题跟上面的类似,不写了。
370. 区间加法
解法跟航班的类似,没有会员,不写了。
The text was updated successfully, but these errors were encountered: