leetcode 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不会有什么变化