搜索旋转排序数组

func search(nums []int, target int) int {
	n := len(nums)
	left, right := 0, n - 1
	for left <= right {
		mid := left + (right - left) >> 1
		if nums[mid] == target {
			return mid
		}
		if nums[0] <= nums[mid] { // [0, mid] 有序
			if nums[0] <= target && target < nums[mid] {
				right = mid - 1
			} else {
				left = mid + 1
			}
		} else { // [mid+1, n) 有序
			if nums[mid] < target && target <= nums[n - 1] {
				left = mid + 1
			} else {
				right = mid - 1
			}
		}
	}
 
	return -1