# 56. Merge Intervals

Medium
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.
Example 1:
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].
Example 2:
Input: intervals = [[1,4],[4,5]]
Output:
[[1,5]]
Explanation:
Intervals [1,4] and [4,5] are considered overlapping.
Constraints:
• `1 <= intervals.length <= 104`
• `intervals[i].length == 2`
• `0 <= starti <= endi <= 104`

### 解題

Runtime: 16 ms, faster than 98.28%
Memory Usage: 6.9 MB, less than 64.73%
func merge(intervals [][]int) [][]int {
sort.Slice(intervals, func(i, j int) bool { return intervals[i] < intervals[j] })
res := make([][]int, 0)
res = append(res, intervals)
index := 0
for i:=1; i<len(intervals); i++ {
if res[index] >= intervals[i] {
continue
}
if res[index] >= intervals[i] && res[index] < intervals[i] {
res[index] = []int{res[index], intervals[i]}
} else {
res = append(res, intervals[i])
index++
}
}
return res
}