闭区间二分查找
原题
153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)
闭区间二分查找模板
func binarySearch(nums[] int, target int) int {
low, high := 0, len(nums)-1
for low < high {
mid := (low+high) >> 1
if nums[mid] < target {
low = mid+1
} else {
high = mid
}
}
if l == r && l >= 0 && l < len(nums) && nums[l] == target {
return l
}
return ERR_NO_SUCH_TARGET
}
二分查找主要是注意边界条件,不然很容易出现死循环或者漏掉答案的情况。
注意点包括
- 循环判断条件是左右指针不相等,相等时说明已经结束
- 尽可能不要出现
<arg> = mid-1的更新,容易出现负的下标,此外执行<arg> = mid+1的情况下也不要在条件分支里存在==target的判断 - 最好判断多个强条件以确定二分查找的答案是正确的