茶艺师学算法打卡8:二分查找

69 阅读1分钟

茶艺师学算法打卡8:二分查找

学习笔记

  1. 二分查找,想写对,要注意终止条件、区间上下界更新方法、返回值选择
  2. 多写写,实在不懂画图

这里分享一下我爱用的二分查找模板:

// 查找第一个等于给定值的元素
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是答案