
10111 和 1110111101 这种。此种情况下 nums[start] == nums[mid],分不清到底是前面有序还是后面有序,此时 start++ 即可。相当于去掉一个重复的干扰项。
package mainimport "fmt"func search(nums []int, target int) bool {left :=0right :=len(nums)-1for left<=right{mid :=left+(right-left)>>1if nums[mid]==target{return true}else if nums[mid]==nums[left]{left++} else if nums[left]<nums[mid]{if nums[left]<=target&&target<nums[mid]{right =mid-1}else {left = mid+1}}else {if nums[mid]<target&&target<=nums[right]{left = mid+1}else {right = mid-1}}}return false}func main() {fmt.Println(search([]int{2,5,6,0,0,1,2},0))fmt.Println(search([]int{2,5,6,0,0,1,2},3))fmt.Println(search([]int{3,1},1))}

