# [LeetCode] 57. 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:

Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]


Example 2:

Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int n = intervals.size(), cur = 0;
while (cur < n && intervals[cur][1] < newInterval[0]) {
res.push_back(intervals[cur++]);
}
while (cur < n && intervals[cur][0] <= newInterval[1]) {
newInterval[0] = min(newInterval[0], intervals[cur][0]);
newInterval[1] = max(newInterval[1], intervals[cur][1]);
++cur;
}
res.push_back(newInterval);
while (cur < n) {
res.push_back(intervals[cur++]);
}
return res;
}
};

class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int n = intervals.size(), cur = 0;
for (int i = 0; i < n; ++i) {
if (intervals[i][1] < newInterval[0]) {
res.push_back(intervals[i]);
++cur;
} else if (intervals[i][0] > newInterval[1]) {
res.push_back(intervals[i]);
} else {
newInterval[0] = min(newInterval[0], intervals[i][0]);
newInterval[1] = max(newInterval[1], intervals[i][1]);
}
}
res.insert(res.begin() + cur, newInterval);
return res;
}
};

class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int n = intervals.size(), cur = 0, i = 0;
while (i < n) {
if (intervals[i][1] < newInterval[0]) {
res.push_back(intervals[i]);
++cur;
} else if (intervals[i][0] > newInterval[1]) {
res.push_back(intervals[i]);
} else {
newInterval[0] = min(newInterval[0], intervals[i][0]);
newInterval[1] = max(newInterval[1], intervals[i][1]);
}
++i;
}
res.insert(res.begin() + cur, newInterval);
return res;
}
};

Github 同步地址：

https://github.com/grandyang/leetcode/issues/57

Range Module

Merge Intervals

https://leetcode.com/problems/insert-interval/

https://leetcode.com/problems/insert-interval/discuss/21669/Easy-and-clean-O(n)-C++-solution

https://leetcode.com/problems/insert-interval/discuss/21602/Short-and-straight-forward-Java-solution

https://leetcode.com/problems/insert-interval/discuss/21676/Clean-and-short-Java-solution-with-explanation

LeetCode All in One 题目讲解汇总(持续更新中...)

posted @ 2015-03-26 00:59  Grandyang  阅读(21121)  评论(0编辑  收藏  举报