题目大意:给出一系列线段,求出每加入一个线段时的最大重叠线段数
分析:线段起始点出度+1,终点入度+1(出度-1),每加入一条边就遍历一次map中的点,由于map自带排序功能,所以遍历时是按数轴顺序遍历每个点的度,每次遍历时总出度所能达到的最大值就是最大重叠线段数。大致思路就是每出现一个起点就代表有一个新的线段,而一个终点的出现就意味着有一条线段结束,那么在结束之前(出度减一之前)出度所达到的最大值就是线段重叠的条数。
代码:
class MyCalendarThree {
public:
int maxnum;
map<int,int> m;
MyCalendarThree() {
maxnum = 0;
}
int book(int start, int end) {
int k = 0;
m[start]++;
m[end]--;
for(auto interval : m){
k += interval.second;
if(k > maxnum) maxnum = k;
}
return maxnum;
}
};
/**
* Your MyCalendarThree object will be instantiated and called as such:
* MyCalendarThree obj = new MyCalendarThree();
* int param_1 = obj.book(start,end);
*/