题目:输入n个区间,给出每个区间的开始位置和结束位置(都是整数),求最多有多少个区间重叠?
该题目也可描述为给出每件事情的开始时间和结束时间(都为整数),求最多有多少个事件同时发生?以下的讲解以这种时间的概念讲解(感觉更容易理解一些)。
输入输出用例:第一行为事件个数,从第二行开始,每行为一个事件的开始时间和结束时间,中间用空格隔开。
5
1 4
1 2
2 3
3 4
3 5
方法一:
求最多有多少个事件同时发生,那我们可以依次把每个时刻(都是整数)发生了多少个事件求出来,找出最大值,即为答案。
如图,先求出t1时刻发生了多少事件,再求t2时刻发生了多少事件,再求t3时刻发生了多少事件,一直求到t4时刻发生了多少事件。
求某一时刻发生了多少事件,需要遍历所有事件,判断事件的起始时间start和结束时间end是否满足:start<=t<end,若满足,则t时刻发生的事件数+1。
时间复杂度度警告!!!这种方法时间复杂度非常高,一共有tmax个时刻,每个时刻遍历一遍所有事件判断该事件在当前时刻是否发生,O(tmax*n)的复杂度。
C++代码:
int main() {
// 处理输入输出
int n;
cin >> n;
vector<vector<int>> vec(n,vector<int> (2)); // 保存每个事件的起始时间和结束时间
int max_en = 0; // 保存最大的时间
for (int i