LeetCode OJ Insert Interval
来源:互联网 发布:游戏中常用算法 编辑:程序博客网 时间:2024/05/16 11:57
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]
.
class Solution {public: void include(vector<Interval> &intervals, int target, int & l, int & r, bool & isIncluded) { // 判断target是否在intervals中,如果在,l、r都为区间坐标,否则为左右区间坐标 for (int i = 0; i < intervals.size(); i++) { if (target < intervals[i].start) { l = i - 1; r = i; isIncluded = false; return; } else if (intervals[i].start <= target && target <= intervals[i].end) { l = r = i; isIncluded = true; return; } } l = intervals.size() - 1; r = intervals.size(); isIncluded = false; } vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { vector<Interval> ans; int sl, sr, el, er; bool si, ei; include(intervals, newInterval.start, sl, sr, si); include(intervals, newInterval.end, el, er, ei); if (si && ei) { // 如果两个都在区间中,只需改变区间上下限 for (int i = 0; i < intervals.size(); i++) { if (i == sl) { Interval newinter(intervals[sl].start, intervals[er].end); ans.push_back(newinter); i = er; } else { ans.push_back(intervals[i]); } } } else if (si && !ei) { // 如果仅有一个在区间中 for (int i = 0; i < intervals.size(); i++) { if (i == sl) { Interval newinter(intervals[i].start, newInterval.end); ans.push_back(newinter); i = el; } else { ans.push_back(intervals[i]); } } } else if (!si && ei) { // 如果仅有一个在区间中 for (int i = 0; i < intervals.size(); i++) { if (i == sr) { Interval newinter(newInterval.start, intervals[er].end); ans.push_back(newinter); i = er; } else { ans.push_back(intervals[i]); } } } else { // 如果两个都不在区间中 if (sr == intervals.size()) { // 新区间在末尾 ans = intervals; ans.push_back(Interval(newInterval.start, newInterval.end)); return ans; } if (er == 0) { // 新区间在开头 ans.push_back(Interval(newInterval.start, newInterval.end)); for (int i = 0; i < intervals.size(); i++) ans.push_back(intervals[i]); return ans; } if (sl == el && sr == er) { // 如果是中间单独形成的一个新区间 for (int i = 0; i < er; i++) ans.push_back(intervals[i]); ans.push_back(Interval(newInterval.start, newInterval.end)); for (int i = er; i < intervals.size(); i++) ans.push_back(intervals[i]); return ans; } for (int i = 0; i < intervals.size(); i++) { // 如果包围了原有的区间 if (i == sr) { Interval newinter(newInterval.start, newInterval.end); ans.push_back(newinter); i = el; } else { ans.push_back(intervals[i]); } } } return ans; }};
0 0
- LeetCode OJ:Insert Interval
- LeetCode OJ - Insert Interval
- LeetCode OJ Insert Interval
- LeetCode OJ 57 Insert Interval [hard]
- LeetCode: Insert Interval & Merge Interval
- LeetCode OJ算法题(五十六):Insert Interval
- LeetCode OJ 之 Insert Interval (插入区间)
- LeetCode题目 Insert Interval
- LeetCode: Insert Interval
- LeetCode Insert Interval
- LeetCode: Insert Interval
- Leetcode: Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode]Insert Interval
- leetcode insert interval
- [leetcode]Insert Interval
- LeetCode-Insert Interval
- centOS 5.8下,手动将静态ip修改为动态ip
- Java中只有按值传递,没有按引用传递!
- VC 多线程编程
- LeetCode OJ Trapping Rain Water
- hdu4267分组线段树
- LeetCode OJ Insert Interval
- leetcode Excel Sheet Column Number
- PAINTSTRUCT结构
- 凡是现实的都是合理的
- Using __iadd__ & __radd__
- Sicily T-primes
- 第二周项目三——时间类(2)
- Openfire3.10beta版源码在eclipse上部署编译
- struts2注解总结----@InterceptorRef