考察的知识点:贪心;
解答方法分析:
- 使用lambda表达式对输入的时间区间进行排序,按照区间起始时间的升序排列。
- 通过遍历排序后的时间区间,依次处理每个时间区间的起始时间和结束时间。
- 在循环中,将当前时间区间的起始时间和结束时间赋值给startTime和endTime变量。
- 使用while循环判断是否存在当前时间区间重叠的下一个区间。如果存在重叠,则更新endTime为重叠时间区间的结束时间,并将循环索引i自增1。这样做的目的是为了跳过已经合并的重叠时间区间,避免重复处理。
- 将最终得到的合并后的时间区间,以起始时间和结束时间的形式,存储在二维数组res中,并返回res作为结果。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param intervals int整型vector<vector<>> * @return int整型vector<vector<>> */ vector<vector<int> > mergeTimeIntervals(vector<vector<int> >& intervals) { int startTime = 0; int endTime = 0; vector<vector<int>> res; sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>& b) { return a[0] < b[0]; }); for (int i = 0; i < intervals.size(); i++) { startTime = intervals[i][0]; endTime = intervals[i][1]; while (i + 1 < intervals.size() && intervals[i + 1][0] >= startTime && intervals[i + 1][0] <= endTime) { endTime = max(endTime, intervals[i + 1][1]); i++; } vector<int> re = { startTime, endTime }; res.push_back(re); } return res; } };