题目
当 k 个日程安排有一些时间上的交叉时(例如 k 个日程安排都在同一时间内),就会产生 k 次预订。
给你一些日程安排 [start, end) ,请你在每个日程安排添加后,返回一个整数 k ,表示所有先前日程安排会产生的最大 k 次预订。
思路
插旗法:进入一个区间的时候将该点坐标对应的值+1,代表插上一面进入的🚩,离开时将该点坐标值-1,代表插上一面离开的🚩,在同一个点可以同时插进入的旗或离开的旗,因为这样并不形成区间重叠。
通过计数器cnt可以得到当前重叠次数,如果不能重叠则cnt>1就返回false(如我的日程安排表一),如果不能重叠三次就cnt>2再返回false(如我的日程安排表二),如果要求最大重叠次数就返回cnt最大值(如我的日程安排表三)。
代码
1 | map<int, int> rec; |