一、分析题目
区间问题技巧:左端点排序或者按照右端点排序。
左端点排序后,仅需考虑后续区间是否能与前⼀个区间重叠即可。
二、代码
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 里后面的时间段的开始时间小于前面时间段的时间。