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].

/**
* 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:
vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Interval>::iterator itstart=intervals.begin();
for(; itstart!=intervals.end(); ++itstart)
if((*itstart).start <= newInterval.start && newInterval.start <= (*itstart).end)
break;
vector<Interval>::iterator itend=intervals.begin();
for(; itend!=intervals.end(); ++itend)
if((*itend).start <= newInterval.end && newInterval.end <= (*itend).end)
break;
if(itstart!=intervals.end() && itend!=intervals.end())
{
if(itstart != itend)
{
(*itstart).end = (*itend).end;
int tmp = (*itstart).end;
itstart++;
while(itstart != intervals.end())
if((*itstart).start <= tmp)
itstart = intervals.erase(itstart);
else break;
}
return intervals;
}else if(itstart==intervals.end() && itend!=intervals.end())
{
(*itend).start = newInterval.start;
int tmp1 = (*itend).start;
int tmp2 = (*itend).end;
itstart = intervals.begin();
while((*itstart).start != tmp1 && (*itstart).end != tmp2)
if((*itstart).start >= tmp1 && (*itstart).end <= tmp2)
itstart = intervals.erase(itstart);
else ++itstart;
return intervals;
}else if(itstart!=intervals.end() && itend==intervals.end())
{
(*itstart).end = newInterval.end;
int tmp = newInterval.end;
++itstart;
while(itstart != intervals.end())
if((*itstart).start < tmp)
itstart = intervals.erase(itstart);
else break;
return intervals;
}else{
vector<Interval>::iterator it=intervals.begin();
for(; it!=intervals.end(); ++it)
if((*it).start > newInterval.start)
break;
//--it;
vector<Interval>::iterator it1 = intervals.insert(it,newInterval);
while(it1 != intervals.end())
{
if((*it1).end < newInterval.end)
it1 = intervals.erase(it1);
else
it1++;
}
return intervals;
}
}
};

leetcode_question_57 Insert Interval的更多相关文章

  1. 【leetcode】Insert Interval

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  2. 60. Insert Interval && Merge Intervals

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  3. 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  4. leetcode Insert Interval 区间插入

    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...

  5. [OJ] Insert Interval

    LintCode #30. Insert Interval (Easy) LeetCode #57. Insert Interval (Hard) class Solution { public: v ...

  6. [Swift]LeetCode57. 插入区间 | Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  7. 【LeetCode】57. Insert Interval

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  8. Leetcode: Merge/Insert Interval

    题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...

  9. [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals

    Interval的合并时比较常见的一类题目,网上的Amazon面经上也有面试这道题的记录.这里以LeetCode上的例题做练习. Merge Intervals Given a collection ...

随机推荐

  1. [ES6] Rest Parameter

    Problem with the ES5: function displayTags(){ for (let i in arguments) { let tag = arguments[i]; _ad ...

  2. SQL Profile 总结(一)

    一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...

  3. WSAWaitForMultipleEvents()

    简述:只要指定事件对象中的一个或全部处于有信号状态,或者超时间隔到,则返回. #include <winsock2.h> DWORD WSAAPI WSAWaitForMultipleEv ...

  4. sqlserver 2008 sa登陆的一些问题

    sqlserver 2008 sa登陆 无法连接到(local)? 遇到这个问题请确保SQL主服务是开启状态: ok接下来把服务器名换成 计算机名\实例名  再次使用sa登陆,如下: 是不是可以了呢? ...

  5. 设置开机启动时指定非ROOT用户执行相应的脚本

    [root@MSJTVL-MJSP-A01 sm01]# vim /etc/rc.d/rc.local #!/bin/sh # # This script will be executed *afte ...

  6. prototype vs __proto__ 之间关系

    __proto__ is the actual object that is used in the lookup chain to resolve methods, etc. __proto__是解 ...

  7. (转)几种HtmlEncode的区别

    一.C#中的编码 HttpUtility.HtmlDecode.HttpUtility.HtmlEncode与Server.HtmlDecode.Server.HtmlEncode与HttpServe ...

  8. ios9基础知识总结(foundation)笔记

    类:NSObject .NSString.NSMutableString.NSNumber.NSValue.NSDate.NSDateFormatter.NSRange.Collections:NSS ...

  9. 在iOS虚拟机上使CLPlacemark获取中文信息

    -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ CLLocat ...

  10. PHP数组相加

    + 运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,但是重复的键值不会被覆盖 ,array_merge()此时会覆盖掉前面相同键名的值 如: $a=array(' ...