🐵指尖猴全新升级
第20课:二分查找
🎯

二分查找

每次砍一半,十亿元素三十次命中!

📖知识引入

🎯二分前提
序列必须有序,乱序二分等于闭着眼睛瞎猜
✂️折半过程
mid=(l+r)/2,目标比mid小砍右半,比mid大砍左半
⚡O(log n)
每比一次范围减半,十亿元素也只要约30次比较
🔪进阶用法
二分答案:把“求最优值”变成“猜一个值判可行”
💡
二分死循环多半是l=mid惹的祸——这种写法mid要写成l+(r-l)/2+1才安全

🔍经典二分查找

int binarySearch(int a[], int n, int target) {
    int l = 1, r = n;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (a[mid] == target) return mid;       // 正中目标
        else if (a[mid] < target) l = mid + 1;  // 目标在右半
        else r = mid - 1;                       // 目标在左半
    }
    return -1;  // 没找到
}

l和r夹住范围,每次用mid砍掉一半。

🎯小测验

第1题:二分查找的前提条件是?

第2题:二分查找的时间复杂度是?

第3题:当a[mid]大于target时应该?

📝本课知识点

  • ✓二分必须有序
  • ✓每次砍掉一半
  • ✓O(log n)快如闪电
第20课完成!继续探索下一课吧 🚀