[LeetCode] Insert Interval
2015-08-19 16:11
323 查看
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].
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].
题目中intervals中的元素都是non-overlapping的,所以即使要找到两个下标sz1和sz2,使得newInterval与他们对应的元素有交集
这里有四种情况
1)sz1<0,则将newInterval放到vector的头位置,vector是顺序容器,不支持push_front的操作(当然也不支持pop_front)
2)sz2=size()-1,则将newInterval push_back即可
3)sz1>sz2 说明newInterval是插入在sz1和sz2之间的
4)sz1<=sz2 说明newInterval与sz1和sz2的元素要融合一下再插入
这里先巩固下顺序容器中访问,插入和删除的操作
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].
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].
题目中intervals中的元素都是non-overlapping的,所以即使要找到两个下标sz1和sz2,使得newInterval与他们对应的元素有交集
这里有四种情况
1)sz1<0,则将newInterval放到vector的头位置,vector是顺序容器,不支持push_front的操作(当然也不支持pop_front)
2)sz2=size()-1,则将newInterval push_back即可
3)sz1>sz2 说明newInterval是插入在sz1和sz2之间的
4)sz1<=sz2 说明newInterval与sz1和sz2的元素要融合一下再插入
这里先巩固下顺序容器中访问,插入和删除的操作
//at和下标操作适用于string,vector,deque和array c c.at(n) 区别在于下标n越界时是否抛出异常 c.back() 返回尾元素的引用 c.front() 返回头元素的引用 //向顺序容器中添加元素 //vector和string不支持push_front和emplace_front c.push_back() c.push_front() c.insert(p,t) 在迭代器p指向的元素之前插入t c.insert(p,n,t) c.inset(p,b,e) 在迭代器p之前插入迭代器b和e范围内的元素。 c.insert(p,il) p之前插入初始化列表 insert返回的是新添加的第一个元素的迭代器 list<string> lst; auto iter = lst.begin(); while(cin>>word) iter = lst.insert(iter, word); //等价于push_front //顺序容器的删除 vector和string不支持pop_front c.pop_back() c.pop_front() c.erase(p) c.erase(b,e) //删除[b,e)之间的元素,e指向的是一个最后一个被删除的元素后一个的迭代器 earse返回的是被删除元素之后的迭代器 elem1 = slist.erase(elem1,elem2); //调用后elem1==elem2
/** * 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) { vector<Interval> new_intervals; if(intervals.size()==0) return vector<Interval>{newInterval}; if(newInterval.end<intervals.front().start) {intervals.insert(intervals.begin(),newInterval); return intervals;} if(newInterval.start>intervals.back().end) {intervals.push_back(newInterval); return intervals;} vector<Interval>::size_type sz1,sz2; sz1= 0; sz2= intervals.size()-1; while(intervals[sz1].end<newInterval.start) ++sz1; while(intervals[sz2].start>newInterval.end) --sz2; if(sz1<=sz2){ newInterval = Interval(min(newInterval.start,intervals[sz1].start),max(newInterval.end,intervals[sz2].end)); intervals.erase(intervals.begin()+sz1,intervals.begin()+sz2+1); //intervals.insert(intervals.begin()+sz1,newInterval); } intervals.insert(intervals.begin()+sz1,newInterval); return intervals; } };
相关文章推荐
- git 使用过程遇到的问题集合
- POJ 2585 Window Pains(拓扑排序·窗口覆盖)
- 模板
- XIB技巧
- POJ 1416 Shredding Company
- codeforces #267 C George and Job(DP)
- nginx安装
- 写文章与写程序
- 写文章与写程序
- Strategy Pattern
- sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,
- 如何用消息系统避免分布式事务?
- 深度学习研究理解:OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
- Java与C++实现相同的MD5加密算法
- 桌面支持--Excel Excel2010 数字自动变日期问题解决办法
- Fragment和Activity
- 根据宽度计算Label的高度
- 写文章与写程序
- SQL语句构建器类
- 在Ceph创建虚拟机的过程改进分析