leetcode Insert Interval 区间插入

作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html

题目链接:leetcode Insert Interval

使用模拟的方法,把需要插入的区间和每一个给定的区间进行比较,有三种情况:

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

 

posted @ 2014-10-25 23:30  jostree  阅读(400)  评论(0编辑  收藏  举报