第20课:二分查找
进度 0/24
🎯
二分查找
每次砍一半,十亿元素三十次命中!
📖知识引入
🎯二分前提
序列必须有序,乱序二分等于闭着眼睛瞎猜
✂️折半过程
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课完成!继续探索下一课吧 🚀
