Second solution
(intervals [][]int)
| 7 | |
| 8 | // Second solution |
| 9 | func merge(intervals [][]int) [][]int { |
| 10 | if len(intervals) == 0 || len(intervals) == 1 { |
| 11 | return intervals |
| 12 | } |
| 13 | |
| 14 | // sort the intervals by start time |
| 15 | sort.Slice(intervals, func(i, j int) bool { |
| 16 | return intervals[i][0] < intervals[j][0] |
| 17 | }) |
| 18 | |
| 19 | j := 0 |
| 20 | merged := [][]int{intervals[0]} |
| 21 | for i := 1; i < len(intervals); i++ { |
| 22 | prev := merged[j] |
| 23 | next := intervals[i] |
| 24 | |
| 25 | // should we merge the interval |
| 26 | if next[0] <= prev[1] { |
| 27 | prev[1] = int(math.Max(float64(prev[1]), float64(next[1]))) |
| 28 | } else { |
| 29 | merged = append(merged, next) |
| 30 | j++ |
| 31 | } |
| 32 | } |
| 33 | |
| 34 | return merged |
| 35 | } |
| 36 | |
| 37 | // First solution |
| 38 | func merge0(intervals [][]int) [][]int { |