Solution (C++):
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int index = 0, m = intervals.size();
while (index < m && intervals[index].back() < newInterval.front()) {
res.push_back(intervals[index++]);
}
while (index < m && intervals[index].front() <= newInterval.back()) {
newInterval[0] = min(intervals[index][0], newInterval[0]);
newInterval[1] = max(intervals[index][1], newInterval[1]);
index++;
}
res.push_back(newInterval);
while (index < m) {
res.push_back(intervals[index++]);
}
return res;
}