| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- package main
 
- func searchOld(nums []int, target int) int {
 
- 	for i, v := range nums {
 
- 		if v == target {
 
- 			return i
 
- 		}
 
- 	}
 
- 	return -1
 
- }
 
- func search(nums []int, target int) int {
 
- 	beg, end := 0, len(nums)-1
 
- 	mid := -1
 
- 	// find the smallest one in nums
 
- 	for beg < end {
 
- 		mid = (beg + end) / 2
 
- 		if nums[mid] > nums[end] {
 
- 			beg = mid + 1
 
- 		} else {
 
- 			end = mid
 
- 		}
 
- 	}
 
- 	if mid == -1 || target == nums[mid] {
 
- 		return mid
 
- 	}
 
- 	// judge which area to search
 
- 	if target > nums[len(nums)-1] {
 
- 		beg, end = 0, mid-1
 
- 	} else {
 
- 		beg, end = mid+1, len(nums)-1
 
- 	}
 
- 	// binary search
 
- 	for beg <= end {
 
- 		mid = (beg + end) / 2
 
- 		if target > nums[mid] {
 
- 			beg = mid + 1
 
- 		} else if target < nums[mid] {
 
- 			end = mid - 1
 
- 		} else {
 
- 			return mid
 
- 		}
 
- 	}
 
- 	return -1
 
- }
 
- /* func main() {
 
- 	a1 := []int{4, 5, 6, 0, 1, 2, 3}
 
- 	a2 := []int{1, 3}
 
- 	fmt.Println(search(a1, 6))
 
- 	fmt.Println(search(a2, 3))
 
- } */
 
 
  |