学习和了解了二分查找
发现二分查找的写法上的小细节
具体表现可以用一个例子来说明
给定一个有序序列,假设
1 2 2 3 3 3 4
若我们使用二分查找,去寻找有序序列表示的值为 3 的下标
我们如何可以有技巧的去寻找到最左边的3与最右边的3下标(默认下标从0开始)
答案也就是
3 5
void binary_search(int l, int r, int x){
int i = l, j = r;
while(l < r){ //寻找最左边的3下标
int mid = l + r >> 1;
if(a[mid] >= x) r = mid;
else l = mid+1;
}
cout << l << " ";
while(i < j){ //寻找最右边的3下标
int mid = i + j +1 >> 1;
if(a[mid] <= x) i = mid;
else j = mid-1;
}
cout << i ;
}
结果: