| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- package main
 
- /**
 
-  * Definition for an interval.
 
-  * type Interval struct {
 
-  *	   Start int
 
-  *	   End   int
 
-  * }
 
-  */
 
- func insert(intervals []Interval, newInterval Interval) (in []Interval) {
 
- 	n := len(intervals)
 
- 	if n == 0 {
 
- 		return append(in, newInterval)
 
- 	}
 
- 	beg := search(intervals, 0, n-1, newInterval.Start)
 
- 	end := search(intervals, beg, n-1, newInterval.End)
 
- 	l, r := newInterval.Start, newInterval.End
 
- 	if beg > n-1 { // It's trival, but also very important
 
- 		in = intervals
 
- 	} else if l < intervals[beg].Start {
 
- 		in = append(in, intervals[:beg]...) // And, copy instead of reference
 
- 	} else if l > intervals[beg].End {
 
- 		in = append(in, intervals[:beg+1]...)
 
- 	} else {
 
- 		l = intervals[beg].Start
 
- 		in = append(in, intervals[:beg]...)
 
- 	}
 
- 	if end > n-1 {
 
- 		in = append(in, Interval{l, r})
 
- 	} else if r < intervals[end].Start {
 
- 		in = append(in, Interval{l, r})
 
- 		in = append(in, intervals[end:]...)
 
- 	} else if r > intervals[end].End {
 
- 		in = append(in, Interval{l, r})
 
- 		if end != n-1 {
 
- 			in = append(in, intervals[end+1:]...)
 
- 		}
 
- 	} else {
 
- 		r = intervals[end].End
 
- 		in = append(in, Interval{l, r})
 
- 		if end != n-1 {
 
- 			in = append(in, intervals[end+1:]...)
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func search(in []Interval, beg, end, val int) int { // Binary search in intervals
 
- 	for beg <= end {
 
- 		mid := (beg + end) / 2
 
- 		if val > in[mid].End {
 
- 			beg = mid + 1
 
- 		} else if val < in[mid].Start {
 
- 			end = mid - 1
 
- 		} else {
 
- 			return mid
 
- 		}
 
- 	}
 
- 	return beg
 
- }
 
- // func main() {
 
- // 	in := []Interval{{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}}
 
- // 	ans := insert(in, Interval{4, 8})
 
- // 	fmt.Println(ans)
 
- // 	in = []Interval{{1, 5}}
 
- // 	ans = insert(in, Interval{6, 8})
 
- // 	fmt.Println(ans)
 
- // 	in = []Interval{}
 
- // 	ans = insert(in, Interval{2, 7})
 
- // 	fmt.Println(ans)
 
- // 	in = []Interval{{1, 5}}
 
- // 	ans = insert(in, Interval{0, 0})
 
- // 	fmt.Println(ans)
 
- // }
 
 
  |