考察的知识点:贪心;

解答方法分析:

  1. 使用lambda表达式对输入的时间区间进行排序,按照区间起始时间的升序排列。
  2. 通过遍历排序后的时间区间,依次处理每个时间区间的起始时间和结束时间。
  3. 在循环中,将当前时间区间的起始时间和结束时间赋值给startTime和endTime变量。
  4. 使用while循环判断是否存在当前时间区间重叠的下一个区间。如果存在重叠,则更新endTime为重叠时间区间的结束时间,并将循环索引i自增1。这样做的目的是为了跳过已经合并的重叠时间区间,避免重复处理。
  5. 将最终得到的合并后的时间区间,以起始时间和结束时间的形式,存储在二维数组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;
    }
};