牛客对应题目链接:主持人调度(一)_牛客题霸_牛客网 (nowcoder.com)

一、分析题目
区间问题技巧:左端点排序或者按照右端点排序。
左端点排序后,仅需考虑后续区间是否能与前⼀个区间重叠即可。
二、代码
1、没看题解之前AC的代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param schedule int整型vector<vector<>> 
     * @return bool布尔型
     */
    bool hostschedule(vector<vector<int> >& schedule) {
        vector<int> t;
        sort(schedule.begin(), schedule.end());
        int n=schedule.size();
        for(int i=0; i<n; i++)
        {
            t.push_back(schedule[i][0]);
            t.push_back(schedule[i][1]);
        }
        for(int i=0; i<n-1; i++)
            if(t[i]>t[i+1])
                return false;
        return true;
    }
};2、值得学习的代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param schedule int整型vector<vector<>> 
     * @return bool布尔型
     */
    bool hostschedule(vector<vector<int> >& schedule) {
        sort(schedule.begin(), schedule.end());
        int n=schedule.size();
        for(int i=1; i<n; i++)
            if(schedule[i][0]<schedule[i-1][1])
                return false;
        return true;
    }
};三、反思与改进
我的思路是:将所有活动的开始时间 starti 和结束时间 endi 都放进数组 t 当中,然后遍历数组 t,如果前一个时间大于后一个时间,则一定会发生时间冲突。思路是正确的,但忘记在最开始对 schedule 的左端点进行排序了,这样就导致可能所给的 schedule 里后面的时间段的开始时间小于前面时间段的时间。


![[Algorithm][回溯][字母大小写全排列][优美的排列][N皇后]详细讲解](https://img-blog.csdnimg.cn/direct/9c535575aef8428c8bcf308126bf53e4.png)
















