uacs2024

导航

leetcode 56. 合并区间

56. 合并区间

一开始的想法时,用一个nums数组给各个区间[ startI , rightI ] 自增 1 ,但是这是错误的。

当遇到  [1 , 2 ]  [ 3 , 4 ] ,   [1 , 2 ]  [ 0 , 0 ] 等情况会变得很难分辨。

这道题的intervals里面各个 start 和 end 本质上 表达的是 一个个开始点和结束点。

而用一个nums数组给各个区间[ startI , rightI ] 自增 1就是把 start 和 end 看成开始段和结束段。

如果intervals 都是 double 类型,nums数组自增的不可用就更加明显了。

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> res;
        sort(intervals.begin(),intervals.end());//二维vector可以直接使用sort,不需要自定义!!!
        int size = intervals.size();
        res.push_back(intervals[0]);
        int count = 1;//count表示res里有多少个元素
        for(int i = 1;i < size;i++){
            if(intervals[i][0] > res[count-1][1])  {
                res.push_back(intervals[i]);//如果res最后一个元素的第二个位置比当前元素的第一位要小,说明二者是没办法合并的
                count++;continue;
            }
            if(res[count-1][1] < intervals[i][1])  res[count-1][1] = intervals[i][1];
        }
        return res;
    }
};

 如果遇到像  【1,6】,【2,3】的情况,当遍历到【2,3】,什么也不做,res不会有什么变化

posted on 2024-11-30 21:09  ᶜʸᵃⁿ  阅读(10)  评论(0)    收藏  举报