Insert Interval
2015-10-29 13:58
246 查看
原题
题目
思路
code
题目
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].
思路
请看code的注释
code
/** * 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: // 判断两个区间是否interset(比较暴力) bool checkIn(const Interval& a, const Interval& b) { bool f1, f2; f1 = a.start >= b.start && a.start <= b.end; f2 = a.end >= b.start && a.end <= b.end; bool f3, f4; f3 = b.start >= a.start && b.start <= a.end; f4 = b.end >= a.start && b.end <= a.end; return f1 || f2 || f3 || f4; } // newInterval要么在intervals的前面, 中间, 和后面. // 在中间的话, 要么merge, 要么独自 vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) { vector<Interval> res; int len = intervals.size(); // empty if(len <= 0) { res.push_back(newInterval); return res; } // traverse int i = 0; bool f = false; for(i = 0; i < len; i++) { // 前面|独自|merged后的独自 if(newInterval.end < intervals[i].start) { f = true; break; // merged } else if(checkIn(intervals[i], newInterval)) { f = true; newInterval.start = min(newInterval.start, intervals[i].start); newInterval.end = max(newInterval.end, intervals[i].end); } else { if(f) { // has been merged break; } res.push_back(intervals[i]); } } // 前面|中间(独自|merged) if(f) res.push_back(newInterval); // the rest for(; i < len; i++) { res.push_back(intervals[i]); } // 后面 if(!f) res.push_back(newInterval); return res; } };
相关文章推荐
- pat 1079 Total Sales of Supply Chain
- ListView random IndexOutOfBoundsException on Froyo
- Html5 本地存储
- iOS面试题非技术面试(二)
- hive中子查询实例
- Android 5.0以后版本打开“有权查看使用情况的应用”
- 基于display:table的CSS布局让HTML元素和像table一样
- 第 8 章 计时器
- GOF共23种设计模式
- Java 随机数
- 动画(五)属性动画的实现原理
- for循环遍历删除报错:java.util.ConcurrentModificationException
- input line-height 兼容解决方案
- Maven的安装使用以及 Maven+Spring hello world example
- 標準の salesforce のページに似たページを作成
- ReactiveCocoa入门教程——第二部分
- iOS面试题非技术面试(一)
- java连接oracle数据库
- Md6算法
- 如何生成RestFul Api文档