首页 > 代码库 > 【leetcode】Insert Interval
【leetcode】Insert Interval
Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9]
, insert and merge [2,5]
in as [1,5],[6,9]
.
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge [4,9]
in as [1,2],[3,10],[12,16]
.
This is because the new interval [4,9]
overlaps with [3,5],[6,7],[8,10]
.
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 int n=intervals.size();15 vector<Interval> result;16 17 if(n==0)18 {19 result.push_back(newInterval);20 return result;21 }22 23 int start=newInterval.start;24 int end=newInterval.end;25 26 27 bool isfindStart=false;28 bool isfindEnd=false;29 bool addCur=true;30 31 for(int i=0;i<n;i++)32 {33 addCur=true;34 35 if(!isfindStart)36 {37 //和当前区间没有交叉,且在start的前面38 if(start>intervals[i].end)39 {40 //需要添加当前元素41 addCur=true;42 //当前元素为最后一个元素时,则认为start找到了43 if(i==n-1) isfindStart=true;44 }45 else46 {47 //和当前区间有交叉 或者start小于当前区间48 49 start=min(start,intervals[i].start);50 //后续就不用再找start了51 isfindStart=true;52 53 //如果start和end没有和其他Interval有交叉54 if(end<intervals[i].start) addCur=true;55 else addCur=false;56 }57 }58 59 60 if(!isfindEnd)61 {62 //需要继续找end63 if(end>intervals[i].end)64 {65 66 if(start<=intervals[i].end) addCur=false;67 68 if(i==n-1)69 {70 isfindEnd=true;71 72 if(addCur) result.push_back(intervals[i]);73 result.push_back(Interval(start,end));74 75 continue;76 }77 }78 else79 {80 //end小于当前区间,此时找到了end81 end=end>=intervals[i].start?intervals[i].end:end;82 83 //找到了end84 isfindEnd=true;85 if(end>=intervals[i].start) addCur=false;86 87 result.push_back(Interval(start,end));88 if(addCur) result.push_back(intervals[i]);89 90 continue;91 }92 }93 94 if(addCur) result.push_back(intervals[i]);95 }96 return result;97 }98 };
【leetcode】Insert Interval
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。