Note: good attempt with 152 / 154 test cases passed. This got messy. Tried to merge newInterval into intervals. Can do better!
(intervals [][]int, newInterval []int)
| 80 | // Note: good attempt with 152 / 154 test cases passed. |
| 81 | // This got messy. Tried to merge newInterval into intervals. Can do better! |
| 82 | func insert0(intervals [][]int, newInterval []int) [][]int { |
| 83 | if len(intervals) == 0 { |
| 84 | return [][]int{newInterval} |
| 85 | } |
| 86 | |
| 87 | // interval goes in front and doesn't merge at all |
| 88 | if newInterval[1] < intervals[0][0] { |
| 89 | return append([][]int{newInterval}, intervals...) |
| 90 | } |
| 91 | |
| 92 | // interval goes in front and merges |
| 93 | if newInterval[1] == intervals[0][0] { |
| 94 | intervals[0][0] = newInterval[0] |
| 95 | return intervals |
| 96 | } |
| 97 | |
| 98 | // newInterval start is less than first interval start |
| 99 | if newInterval[0] < intervals[0][0] { |
| 100 | intervals[0][0] = newInterval[0] |
| 101 | intervals[0][1] = int(math.Max(float64(newInterval[1]), float64(intervals[0][1]))) |
| 102 | } |
| 103 | |
| 104 | for i := 0; i < len(intervals); i++ { |
| 105 | interval := intervals[i] |
| 106 | |
| 107 | // find where the start is less than the finish of interval |
| 108 | if newInterval[0] <= interval[1] { |
| 109 | // while newIntervals end is greater than starts of subsequent intervals |
| 110 | j := i |
| 111 | for j < len(intervals) { |
| 112 | // insert in between j and j-1 |
| 113 | if i > 0 && intervals[j-1][1] < newInterval[0] && intervals[j][0] > newInterval[1] { |
| 114 | return append(append(append([][]int{}, intervals[:j]...), newInterval), intervals[j:]...) |
| 115 | } |
| 116 | |
| 117 | if newInterval[1] <= intervals[j][0] { |
| 118 | break |
| 119 | } |
| 120 | |
| 121 | j++ |
| 122 | } |
| 123 | |
| 124 | if j == len(intervals) { |
| 125 | intervals[i][0] = int(math.Min(float64(intervals[i][0]), |
| 126 | float64(newInterval[0]))) |
| 127 | intervals[i][1] = int(math.Max(float64(newInterval[1]), |
| 128 | float64(intervals[len(intervals)-1][1]))) |
| 129 | intervals = intervals[0 : i+1] |
| 130 | } else if newInterval[1] < intervals[j][0] { |
| 131 | intervals[i][0] = int(math.Min(float64(intervals[i][0]), |
| 132 | float64(newInterval[0]))) |
| 133 | intervals[i][1] = int(math.Max(float64(intervals[j-1][1]), |
| 134 | float64(newInterval[1]))) |
| 135 | if j-i > 1 { |
| 136 | intervals = append(append([][]int{}, intervals[0:j-1]...), intervals[j:]...) |
| 137 | } |
| 138 | } else if newInterval[1] <= intervals[j][0] { |
| 139 | intervals[i][1] = intervals[j][1] |
nothing calls this directly
no outgoing calls
no test coverage detected