|
@@ -0,0 +1,147 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ var nums []int
|
|
|
+ var target int
|
|
|
+
|
|
|
+ nums = []int{1}
|
|
|
+ target = 1
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1}
|
|
|
+ target = 0
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2}
|
|
|
+ target = 1
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2}
|
|
|
+ target = 3
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 0
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 1
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 2
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 3
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 4
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{1, 2, 4}
|
|
|
+ target = 5
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ fmt.Println("----------------------------")
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 0
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 1
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 2
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 3
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 4
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 1, 2}
|
|
|
+ target = 5
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ fmt.Println("----------------------------")
|
|
|
+ // 4, -1, 0, 6, 3, 1, 5
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 0
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 3
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 4
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 2
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 7
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 5
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ nums = []int{4, 5, 6, 7, 0, 1, 2}
|
|
|
+ target = 1
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+
|
|
|
+ fmt.Println("----------------------------")
|
|
|
+
|
|
|
+ nums = []int{8, 1, 2, 3, 4, 5, 6, 7}
|
|
|
+ target = 6
|
|
|
+ fmt.Println(search(nums, target))
|
|
|
+}
|
|
|
+
|
|
|
+func search(nums []int, target int) int {
|
|
|
+ var min, mid, max int = 0, 0, len(nums) - 1
|
|
|
+ var index = -1
|
|
|
+ for min <= max {
|
|
|
+ mid = (min + max) / 2
|
|
|
+ //fmt.Println(nums[min], nums[max], nums[mid])
|
|
|
+ if nums[mid] == target {
|
|
|
+ return mid
|
|
|
+ }
|
|
|
+ if nums[min] == target {
|
|
|
+ return min
|
|
|
+ }
|
|
|
+ if nums[max] == target {
|
|
|
+ return max
|
|
|
+ }
|
|
|
+ if nums[min] < nums[mid] && nums[mid] < target {
|
|
|
+ min = mid + 1
|
|
|
+ } else if nums[min] < nums[mid] && nums[mid] > target && nums[min] < target {
|
|
|
+ max = mid - 1
|
|
|
+ } else if nums[min] > nums[mid] && nums[mid] < target && nums[min] < target {
|
|
|
+ max = mid - 1
|
|
|
+ } else if nums[min] < nums[mid] && nums[mid] > target && nums[min] > target {
|
|
|
+ min = mid + 1
|
|
|
+ } else if nums[min] > nums[mid] && nums[mid] < target && nums[min] > target {
|
|
|
+ min = mid + 1
|
|
|
+ } else if nums[min] > nums[mid] && nums[mid] > target {
|
|
|
+ //nums[min]>nums[mid] && nums[mid] > target
|
|
|
+ max = mid - 1
|
|
|
+ } else {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return index
|
|
|
+}
|