二分查找
- 使用前提:有序。
- 可理解为枚举的一种技巧。
- 时间复杂度: l o g ( n ) log(n) log(n)
基础模版代码
- 使用时根据情景进行相应的变化。
- 注意跳出条件and分支处理方式and返回答案,三者之间的配合,不要进入死循环。
- 可以在模拟一下最后得到答案时的运行情况来判断。
int bs(int a[],int n,int tg)
{int l=0,r=n-1;while(l<=r){int mid=(l+r)/2;if(a[mid]==tg) return mid;else if(a[mid]>tg) r=mid-1;else l=mid+1;}return -1;
}
常见题型
求最值
- 洛谷1873 砍树
- 力扣073 爱吃香蕉的狒狒
最小化最大值
- 有多个分段,通过移除操作,得到一个最小的分段最大值。
- 洛谷2678 跳石头
最大化最小值
- 有多个分段,通过移除操作,得到一个最大的分段最小值。