邓心一 6 år sedan
förälder
incheckning
eadc4c54f9
2 ändrade filer med 70 tillägg och 8 borttagningar
  1. 61 8
      hard/57.go
  2. 9 0
      hard/65.go

+ 61 - 8
hard/57.go

@@ -1,9 +1,5 @@
 package main
 
-import (
-	"fmt"
-)
-
 /**
  * Definition for an interval.
  * type Interval struct {
@@ -12,11 +8,68 @@ import (
  * }
  */
 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 main() {
-	in := []Interval{{1, 2}, {3, 5}, {6, 7}, {8, 10}, {12, 16}}
-	ans := insert(in, Interval{1, 2})
-	fmt.Println(ans)
+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)
+// }

+ 9 - 0
hard/65.go

@@ -0,0 +1,9 @@
+package main
+
+func isNumber(s string) bool {
+	return false
+}
+
+func main() {
+	println(isNumber(""))
+}