Given an array of intervals intervals, where each interval is a two-element array [start, end], merge all overlapping intervals and return a new array of non-overlapping intervals sorted by their start time. Each returned interval should cover the full range of all intervals merged into it.
def merge_intervals(intervals):