leetcode 56. 合并区间(C++)

    xiaoxiao2022-07-06  186

    给出一个区间的集合,请合并所有重叠的区间。

    示例 1:

    输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

    排序法

    如果排序后,可以发现如果intervals[i][1] >= intervals[i+1][0],则合并后的区间为{intervals[0], max(intervals[i][1], intervals[i+1][1])}。

    注意:

    1.不能把合并后的区间直接放入答案中,因为合并后的区间可能还可以和后面的区间继续合并,所以这里使用了temp用来存放合并后的区间;

    2.所以放入答案中的条件是不能合并,然后temp向前移一步;

    3.循环并没有遍历到最后一个区间,所以在循环结束时,还要在放入一次。

    class Solution { typedef vector<vector<int>> TwoDimArray; public: TwoDimArray merge(TwoDimArray& intervals) { TwoDimArray ans; if(intervals.size() == 0) return ans; sort(intervals.begin(), intervals.end()); vector<int> temp = intervals[0]; for(int i = 0; i < intervals.size() - 1; i++){ if(temp[1] < intervals[i+1][0]){ ans.push_back(temp); temp = intervals[i+1]; } else temp = {temp[0], max(temp[1], intervals[i+1][1])}; } ans.push_back(temp); return ans; } };

     

    最新回复(0)