Here is the implementation:
function merge(intervals):
sort intervals by start
result = [intervals[0]]
for i from 1 to intervals.length - 1:
last = result[result.length - 1]
current = intervals[i]
if current[0] <= last[1]:
last[1] = max(last[1], current[1])
else:
result.append(current)
return result
Sorting takes . The merge pass is . Total: time, space for output.