Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.
Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlap, merge them into [1,6].
Input: intervals = [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
Input: intervals = [[4,7],[1,4]]
Output: [[1,7]]
Explanation: Intervals [1,4] and [4,7] are considered overlapping.
The simplest, although not the most efficient, way to solve the problem is to compare each interval with every other interval to check for any overlapping. If two intervals overlap, they are merged into one. This process continues until we can no longer find any new intervals to merge, indicating all possible merges have been completed.
A more optimal way to tackle the problem is to take advantage of sorting. By sorting intervals based on the start time, we can efficiently check for overlaps by comparing each interval with the last interval in a merged list. If they overlap, merge them; otherwise, just add the interval to the merged list.