时间复杂度:O(log n)
解题思路
初始化left和right指针,for循环条件为left<right,循环内计算mid,比较target和nums[mid]的大小,如果相等就返回mid,大于就更新left为mid+1,小于就更新right为mid-1,如果跳出循环就返回-1。
AC代码
func search(nums []int, target int) int {
left,right:=0,len(nums)-1
for left<=right{
mid:=(right-left)>>1+left
if target==nums[mid]{
return mid
}else if target>nums[mid]{
left=mid+1
}else{
right=mid-1
}
}
return -1
}
感悟
只记着二分查找的思想,但是忘记了细节,竟然忘记了left和right怎么更新!一定要更新成mid加1和减1。mid的计算其实用到了小技巧,为了防止left+right越界,先计算了差值再加给left。