function insert(intervals, newInterval)
result := []
i := 0
n := length of intervals
// Phase 1: intervals ending before newInterval starts
while i < n and intervals[i].end < newInterval.start
result.append(intervals[i])
i := i + 1
// Phase 2: merge overlapping intervals
while i < n and intervals[i].start <= newInterval.end
newInterval.start := min(newInterval.start, intervals[i].start)
newInterval.end := max(newInterval.end, intervals[i].end)
i := i + 1
result.append(newInterval)
// Phase 3: remaining intervals
while i < n
result.append(intervals[i])
i := i + 1
return result
time, space.