Просмотр исходного кода

add 'Search in Rotated Sorted Array'

tangs 5 лет назад
Родитель
Сommit
f9d010a3ff
1 измененных файлов с 147 добавлено и 0 удалено
  1. 147 0
      tags/array/searchInRotatedSortedArray/main.go

+ 147 - 0
tags/array/searchInRotatedSortedArray/main.go

@@ -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
+}