
重点
- 数组为升序有序数组
思路
- 一般对于有序数组,都应该和二分查找联系在一起,该题为在有序数组中查找目标值;
- 对于二分查找最重要的是注意循环不变量,我们分别用left, right代表最前面的元素与最后面的元素,当数据范围为[left, right]时,那我们便利时为了不漏数据,就需要使用while left <= right, 而当我们使用[left, right)范围时,我们就需要使用while left < right;以下是分别两种解法
解法一 使用[left, right)作为数据范围时
func search(nums []int, target int) int {
left, right := 0, len(nums)
for left < right{
mid := (left + right) / 2
if nums[mid] == target{
return mid
} else if nums[mid] > target{
right = mid
}else{
left = mid + 1
}
}
return -1
}
解法二 使用[left, right]作为数据范围时
func search(nums []int, target int) int {
left, right := 0, len(nums) - 1
for left <= right{
mid := (left + right) / 2
if nums[mid] == target{
return mid
} else if nums[mid] > target{
right = mid - 1
}else{
left = mid + 1
}
}
return -1
}