0081.搜索旋转排序数组 II

方法一:二分搜索

时间复杂度 $O(\log n)$,空间复杂度 $O(1)$。

func search(nums []int, target int) bool {
	for l, r := 0, len(nums)-1; l <= r; {
		m := l + (r-l)>>1
		if nums[m] == target {
			return true
		} else if nums[m] > nums[l] || nums[m] > nums[r] {
			if target >= nums[l] && target < nums[m] {
				r = m - 1
			} else {
				l = m + 1
			}
		} else if nums[m] < nums[l] || nums[m] < nums[r] {
			if target > nums[m] && target <= nums[r] {
				l = m + 1
			} else {
				r = m - 1
			}
		} else {
			r -= 1
		}
	}
	return false
}