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; } };