首页 > 代码库 > [leetcode]Insert Interval
[leetcode]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]
.
基本思路:
考虑三种情况:
- newInterval.start > intervals[i].end 将intervals[i]加入结果
- newInterval.end < intervals[i].start 将newInterval加入结果
- overlap 将融合的几何加入结果
代码:
//my code is ugly. so i copy a wonderfu for you. vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { //C++ vector<Interval> ret; int i = 0; for (i = 0; i < intervals.size(); i++) { // If newInterval is BEHIND the current interval if (newInterval.start > intervals[i].end) ret.push_back(intervals[i]); // then the current interval goes to the result // If new Interval is BEFORE the current interval else if (newInterval.end < intervals[i].start) { ret.push_back(newInterval); // then new interval goes to the result newInterval = intervals[i]; // and save the current interval for later } else // If newInterval OVERLAPS WITH the current interval { // Then simply merge the two intervals. newInterval.start = min(newInterval.start, intervals[i].start); newInterval.end = max(newInterval.end, intervals[i].end); } } // In the end, there will be one interval that is still not stored in the result; and this interval, regardless where it comes from the vector or the newInterval, must be stored in newInterval at this point. ret.push_back(newInterval); return ret; }
[leetcode]Insert Interval
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。