|
11 | 11 | class Solution {
|
12 | 12 | public:
|
13 | 13 | vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
|
14 |
| - int i = 0; |
| 14 | + vector<vector<int>> ans; |
| 15 | + int newStart = newInterval[0]; |
| 16 | + int newEnd = newInterval[1]; |
15 | 17 | int n = intervals.size();
|
16 |
| - |
17 |
| - vector<vector<int>> result; |
18 |
| - |
19 |
| - while (i < n && intervals[i][1] < newInterval[0]) { |
20 |
| - result.push_back(intervals[i]); |
21 |
| - i++; |
| 18 | + for (int i = 0; i < n; i++) { |
| 19 | + // Case 1: Non overlapping interval |
| 20 | + // If new interval is before the current interval |
| 21 | + if (intervals[i][0] > newEnd) { |
| 22 | + ans.push_back(newInterval); |
| 23 | + copy(intervals.begin() + i, intervals.end(), back_inserter(ans)); |
| 24 | + return ans; |
| 25 | + } |
| 26 | + // If new interval is after the current interval |
| 27 | + else if (intervals[i][1] < newStart) { |
| 28 | + ans.push_back(intervals[i]); |
| 29 | + } |
| 30 | + // Case 2: Overlapping interval |
| 31 | + else { |
| 32 | + newInterval[0] = min(newInterval[0], intervals[i][0]); |
| 33 | + newInterval[1] = max(newInterval[1], intervals[i][1]); |
| 34 | + } |
22 | 35 | }
|
23 |
| - |
24 |
| - while (i < n && intervals[i][0] <= newInterval[1]) { |
25 |
| - newInterval[0] = min(newInterval[0], intervals[i][0]); |
26 |
| - newInterval[1] = max(newInterval[1], intervals[i][1]); |
27 |
| - i++; |
28 |
| - } |
29 |
| - result.push_back(newInterval); |
30 |
| - |
31 |
| - while (i < n) { |
32 |
| - result.push_back(intervals[i]); |
33 |
| - i++; |
34 |
| - } |
35 |
| - |
36 |
| - return result; |
| 36 | + ans.push_back(newInterval); |
| 37 | + return ans; |
37 | 38 | }
|
38 | 39 | };
|
0 commit comments