二分模板总结
作者:
zshlmy
,
2020-12-18 15:22:23
,
所有人可见
,
阅读 682
两套模板,每一套模板都有两种情况
第一套
l = 0,r = n -1;
while(l <= r){
int mid = l + r >> 1;
if(a[mid] >= x) r = mid - 1;
else l = mid + 1;
}
//执行结束,l 位置是第一个和 x 相等的数
l = 0,r = n -1;
while(l <= r){
int mid = l + r >> 1;
if(a[mid] > x) r = mid - 1;//此处有区别
else l = mid + 1;
}
//执行结束,r 位置是最后一个和 x 相等的数
第二套
l = 0,r = n -1;
while(l < r){
int mid = l + r >> 1;
if(a[mid] >= x) r = mid;
else l = mid + 1;
}
//执行结束,l 位置是第一个和 x 相等的数
l = 0,r = n -1;
while(l < r){
int mid = l + r + 1 >> 1;
if(a[mid] > x) r = mid - 1;
else l = mid;
}
//执行结束,l 位置是最后一个和 x 相等的数