LeetCode-Insert Interval-插入时间段-遍历+条件判断
https://oj.leetcode.com/problems/insert-interval/
一道比较简单的题。主要就是扫描一段数组,看哪些时间段与目标时间段相交,相交的那些用来更新目标时间段。在相交结束时插入目标时间段。
需要注意的是目标时间出现在两个时间段中间的情况,哪个都没有相交但是也需要插入。
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
int n,m;
vector <int> v;
bool Inter(Interval &t1,Interval &t2){
if (t1.start>=t2.start && t1.start<=t2.end){
return true;
}
if (t1.end>=t2.start && t1.end<=t2.end){
return true;
}
return false;
}
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
m=intervals.size();
vector<Interval> &a=intervals;
int l=newInterval.start;
int r=newInterval.end;
vector <Interval> res;
if (m==0) {
res.push_back(newInterval);
return res;
}
if (r<a[0].start){
res.push_back(newInterval);
for (int i=0;i<m;i++){res.push_back(a[i]);}
return res;
}
if (l>a[m-1].end){
res=a;
res.push_back(newInterval);
return res;
}
bool enter=false;
for (int i=0;i<m;i++){
if (Inter(a[i],newInterval)){
enter=true;
l=min(l,a[i].start);
r=max(r,a[i].end);
}
else{
if (enter){
res.push_back(Interval(l,r));
enter=false;
res.push_back(a[i]);
}
else{
res.push_back(a[i]);
if (i<m-1){
if (l>a[i].end && r<a[i+1].start){
res.push_back(newInterval);
}
}
}
}
}
if (enter) res.push_back(Interval(l,r));
return res;
}
};
浙公网安备 33010602011771号