二分
用二分去查找元素要求数组的有序性或者拥有类似于有序的性质,有两个二分,一个需要找到>=x的第一个数字,另一个需要找到<=x的最后一个数。
1、查找到>=x的第一个数字
int l = 0, r = n - 1;
while (l < r) {
int mid = l + r >> 1;
if (a[mid] < x) l = mid + 1;
else r = mid;
}
当查找结束时,l与r相遇,l、r指向元素一定是>=x的第一个数字,因为l左边的都是小于x的数字。
2、找到<=x的最后一个数字
int l = 0, r = n - 1;
while (l < r)
{
int mid = l + r + 1 >> 1;
if (a[mid] <= x) l = mid;
else r = mid - 1;
}