作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html
使用模拟的方法,把需要插入的区间和每一个给定的区间进行比较,有三种情况:
1.给定区间的起点小于要插入区间的终点,并且区间还未被查入过,那么插入区间。
2.给定区间的终点大于要插入区间的起点,或者插入区间已经被插入过了,那么插入给定区间。
3.不满足以上两种情况,说明给定区间与插入区间有交集,那么把需要插入的区间修改为其并集。
代码中的标记位inserted,标记需要插入的区间是否被插入到了结果中。
代码如下:
1 /** 2 * Definition for an interval. 3 * struct Interval { 4 * int start; 5 * int end; 6 * Interval() : start(0), end(0) {} 7 * Interval(int s, int e) : start(s), end(e) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) 13 { 14 vector<Interval> res; 15 bool inserted = 0; 16 for( int i = 0 ; i < intervals.size() ; i++ ) 17 { 18 if( intervals[i].start > newInterval.end && inserted == 0 ) 19 { 20 res.push_back(newInterval); 21 res.push_back(intervals[i]); 22 inserted = 1; 23 } 24 else if( intervals[i].end < newInterval.start || inserted== 1) 25 { 26 res.push_back(intervals[i]); 27 } 28 else 29 { 30 newInterval.start = min(newInterval.start, intervals[i].start); 31 newInterval.end = max(newInterval.end, intervals[i].end); 32 } 33 } 34 if( inserted == 0 ) 35 { 36 res.push_back(newInterval); 37 } 38 return res; 39 } 40 41 };