## Description

Merge Intervals

Given a collection of intervals, merge all overlapping intervals.

Example 1:

``````Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
``````

Example 2:

``````Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
``````

## Solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 `````` ``````/** * Definition for an interval. * type Interval struct { * Start int * End int * } */ type IntervalArr []Interval func (h IntervalArr) Len() int { return len(h) } func (h IntervalArr) Less(i, j int) bool { return h[i].Start < h[j].Start } func (h IntervalArr) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func merge(intervals []Interval) []Interval { if len(intervals) == 0 { return nil } // 先对区间进行排序 sort.Sort(IntervalArr(intervals)) ret := make([]Interval, 0) pInter := &intervals[0] for i := 1; i < len(intervals); i++ { curInter := &intervals[i] if pInter.End >= curInter.Start { if pInter.End < curInter.End { // “合并操作” pInter.End = curInter.End } } else { ret = append(ret, *pInter) pInter = curInter } } ret = append(ret, *pInter) return ret }``````