茶艺师学算法打卡8:二分查找
学习笔记
- 二分查找,想写对,要注意终止条件、区间上下界更新方法、返回值选择
- 多写写,实在不懂画图
这里分享一下我爱用的二分查找模板:
// 查找第一个等于给定值的元素
left, right := 0, n // 正常范围[0 ... n - 1] + 找不到的[n] => 查找范围[0 ... n]
for left < right {
mid := left + (right - left) >> 1
if arr[mid] >= target { // 条件
right = mid // 大于target,自然是【右边】
} else {
left = mid + 1
}
}
return right // right是答案
// 查找最后一个等于给定值的元素
left, right := -1, n - 1 // 找不到的[-1] + 正常范围[0 ... n - 1] => 查找范围[-1 ... n - 1]
for left < right {
mid := left + (right - left) + 1 >> 1 // 要加1
if arr[mid] <= target { // 条件
left = mid // 小于target,自然是在左边
} else {
right = mid - 1
}
}
return right // right是答案