# 57. Insert Interval ###### tags: `C++` `LeetCode` `Medium` ## Notes ``` = example 1 = index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} step 1 : currentInterval = 0 result : {1, 2} index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result step 2 : currentInterval = 1 result : {1, 2} newInterval[LEFT] = 4 index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result |---- step 3 : currentInterval = 2 result : {1, 2} newInterval[LEFT] = 3 index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result |----------- step 4 : currentInterval = 3 result : {1, 2} newInterval[LEFT] = 3 index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result |------------------- step 5 : currentInterval = 4 result : {1, 2} {3, 10} newInterval[LEFT] = 3 newInterval[RIGHT] = 10 index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result |-------------------| step 5 : currentInterval = 4 result : {1, 2} {3, 10} {12, 16} newInterval[LEFT] = 3 newInterval[RIGHT] = 10 index 0 1 2 3 4 {1,2}, {3,5}, {6,7}, {8,10}, {12,16} result |-------------------| result ``` ## Code ```c++ #include <vector> #include "cout.h" vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval); int binarySearch(vector<vector<int>> intervals, int target); int main() { vector<vector<int>> intervals = {{1,2}, {3,5}, {6,7}, {8,10}, {12,16}}; vector<int> newInterval = {4, 8}; coutVectorVector(insert(intervals, newInterval)); return 0; } vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { vector<vector<int>> result; vector<int> newMergeInterval = {0, 0}; int len = intervals.size(); int currentInterval = 0; int mergeLeft = 0; int mergeRight = 0; for(currentInterval = 0; currentInterval < len; currentInterval++) { if(intervals[currentInterval][1] < newInterval[0]) { result.push_back(intervals[currentInterval]); } else break; } mergeLeft = (currentInterval < len && intervals[currentInterval][0] < newInterval[0]) ? intervals[currentInterval][0] : newInterval[0]; for( ; currentInterval < len; currentInterval++) { if(intervals[currentInterval][0] > newInterval[1]) break; } mergeRight = (currentInterval - 1 >= 0 && intervals[currentInterval - 1][1] > newInterval[1]) ? intervals[currentInterval - 1][1] : newInterval[1]; newMergeInterval[0] = mergeLeft; newMergeInterval[1] = mergeRight; result.push_back(newMergeInterval); for( ; currentInterval < len; currentInterval++) { result.push_back(intervals[currentInterval]); } return result; } ```