将会议的开始时间和结束时间分别排序。每当会议开始时,所需会议室数count加一;每当会议结束时,所需会议室数count减一。最终所得最大会议室数即为答案

public:
    int minMeetingRooms(vector<vector<int> >& intervals) {
        int n = intervals.size();
        vector<int> starti = vector<int>(n);
        vector<int> endi = vector<int>(n);
        for(int i = 0; i < n; ++i)
        {
            starti[i] = intervals[i][0];
            endi[i] = intervals[i][1];
        }
        sort(starti.begin(), starti.end()); //将starti和endi排序
        sort(endi.begin(), endi.end());
        int count = 0;
        int max_count = 0;
        int i = 0;
        int j = 0;
        int k = 0;
        while(j < n)          
        {
            if(starti[i] == k)     //当会议开始时会议室数count加一
            {
                ++count;
                ++i;
            }
            if(endi[j] == k)       //当会议结束时会议室数count减一
            {
                --count;
                ++j;
            }
            ++k;
            max_count = max(max_count, count); //count中最大值为须准备会议室数
        }
        return max_count;
    }
};