区间合并问题,以前某次帮飞哥面试做过一次,但是没有细细总结;
其实不用合并到一起,直接双指针就可以;
对于两个指针,都指向一个区间;
交集便是两开端的最大值和两尾端的最小值;
两个指针那个尾端先结束,就先右移;
具体代码: 1.合并排序求交:class Solution {
public:
vector> intervalIntersection(vector>& firstList, vector>& secondList) {
vector> ret;
firstList.insert(firstList.begin(),secondList.begin(),secondList.end());
sort(firstList.begin(),firstList.end(),[](vector& a,vector& b){
if(a[0]
if(vec[0]>end){
//如果无交集
start=vec[0];
end=vec[1];
continue;
}
if(vec[0]<=end&&vec[1]>end){
//如果部分交集;
ret.push_back({vec[0],end});
start=vec[0];
end=vec[1];
continue;
}
//如果是子集关系;
ret.push_back({max(start,vec[0]),min(end,vec[1])});
start=min(start,vec[0]);
end=max(end,vec[1]);
}
return ret;
}
};
2.双指针:
class Solution {
public:
vector> intervalIntersection(vector>& firstList, vector>& secondList) {
vector> ret;
int i=0,j=0;
int m=firstList.size();
int n=secondList.size();
while(i
int start=max(firstList[i][0],secondList[j][0]);
int end=min(firstList[i][1],secondList[j][1]);
if(start<=end)
ret.push_back({start,end});
if(firstList[i][1]
i++;
}else{
j++;
}
}
return ret;
}
};



