Skip to content

Commit f7ed306

Browse files
authored
Create insert-interval.cpp
1 parent d1dabd6 commit f7ed306

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

C++/insert-interval.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Time: O(n)
2+
// Space: O(1)
3+
4+
/**
5+
* Definition for an interval.
6+
* struct Interval {
7+
* int start;
8+
* int end;
9+
* Interval() : start(0), end(0) {}
10+
* Interval(int s, int e) : start(s), end(e) {}
11+
* };
12+
*/
13+
class Solution {
14+
public:
15+
vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
16+
size_t i = 0;
17+
vector<Interval> result;
18+
// Insert intervals appeared before newInterval.
19+
while (i < intervals.size() && newInterval.start > intervals[i].end) {
20+
result.emplace_back(intervals[i++]);
21+
}
22+
23+
// Merge intervals that overlap with newInterval.
24+
while (i < intervals.size() && newInterval.end >= intervals[i].start) {
25+
newInterval = {min(newInterval.start, intervals[i].start),
26+
max(newInterval.end, intervals[i].end)};
27+
++i;
28+
}
29+
result.emplace_back(newInterval);
30+
31+
// Insert intervals appearing after newInterval.
32+
result.insert(result.end(), intervals.cbegin() + i, intervals.cend());
33+
return result;
34+
}
35+
};

0 commit comments

Comments
 (0)