#include <algorithm>
class Solution {
public:
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
        //需要检测每个时间所需要的主持人,也就是活动个数,
        //如果只对开始时间进行排序,遍历开始时间时,需要记录已经开始的活动的结束时间,并且每轮需要检测有多少活动结束,并开启本轮活动;
        vector<int> start, end;

        for(int i=0; i<n; ++i){     //把开始时间和结束时间分别放在两个数组中,并排序;
            start.push_back(startEnd[i][0]);
            end.push_back(startEnd[i][1]);
        }
        sort(start.begin(), start.end());
        sort(end.begin(), end.end());       

        int i=0, j=0, hosts = 0, maxhosts = 0;  //i时开始时间点,j是结束时间点

        while(i < n){
            if(start[i] < end[j]){  //开始时间小于结束时间,表示没有活动结束,但有新的活动开始了,结束时间不一定是本开始时间对应的,但是也说明了这个活动开始了;
                ++hosts;
                maxhosts = max(hosts, maxhosts);
                ++i;
            }else{   //开始时间小于或者大于检测的结束时间,表示结束时间对应的活动结束了,
                hosts--;
                ++j;
            }
        }

        return maxhosts;
    }
};