对二维数组进行排序,依据第一位排序,如果返回0就交换位置。排序完后就很简单了,遍历该数组,如果当前区间的最小值小于结果数组最后一位的最大值,那么就得合并!!因为后一个区间的最小值大于等于前一个区间的最小值,那么如果小于前一个区间的最大值,就证明一定区间重复了。就更新结果数组最后一个区间的最大值,最小值不用更新!如果没有重复,就将当前区间加入结果数组,并将j++,j是我们用来记录结果数组最后一位的下标。
class Solution {
public:
static bool cmp(vector<int> a,vector<int> b){
if(a[0] != b[0]) return a[0] < b[0];
return false;
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
//先对其进行排序,这样下一个区间如果和前一个重复的话,下一区间的最小值一定在前一个区间内
vector<vector<int>> res;
if(intervals.size() == 0) return res;
sort(intervals.begin(),intervals.end(),cmp);
res.push_back(intervals[0]);
//每次遍历掉intervals的时候
int j = 0;
for(int i = 1; i < intervals.size(); ++i){
if(intervals[i][0]<=res[j][1]){
res[j][1] = max(res[j][1],intervals[i][1]);
}
else{
res.push_back(intervals[i]);
j++;
}
}
return res;
}
};
合并的时候,前一个的右边不一定小于后一个的右边,要取较大值赋给已存在区间的右边
class Solution {
public:
static bool cmp(vector<int>& v1, vector<int>& v2){
//如果为0就是互换,1就不交换
if(v1[0] != v2[0]) return v1[0]<v2[0];
else return v1[1] < v2[1];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
//都是将大的排前面
vector<vector<int>> res;
sort(intervals.begin(),intervals.end(),cmp);
//然后遍历排序完的数组,判断前一个的最大值是否大于后一个的最小值
//如果大于,证明有合并区间,然后再用这个合并完的去和后面的比
res.push_back(intervals[0]);
int index = 0;//这是记录res数组最后一个区间的下标
for(int i = 1; i < intervals.size(); ++i){
if(res[index][1] >= intervals[i][0]){
res[index][1] = max(res[index][1],intervals[i][1]);
}
else{
res.push_back(intervals[i]);
index++;
}
}
return res;
}
};
记得重新开一个数组存
class Solution {
public:
//区间问题直接贪心,肯定先排序
//前面小的排前面,后面大的排后面,每次拿当前的区间的后面和后一个区间的前面比,如果大于,就取两个区间后面比较大的那个作为前一个区间的后一个
static bool cmp(const vector<int>& a, const vector<int>& b){
if(a[0] != b[0]) return a[0] < b[0];
else return a[1] < b[1];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end(),cmp);
vector<vector<int>> res;
res.push_back(intervals[0]);
int qian = 0;
for(int i = 1; i < intervals.size(); ++i){
if(res[qian][1] >= intervals[i][0]){
res[qian][1] = max(intervals[i][1],res[qian][1]);
}
else{
res.push_back(intervals[i]);
qian++;
}
}
return res;
}
};