二分算法总结
- 一、求大于当前数的第一个数的下标
- 二、求小于当前数的第一个数的下标
一、求大于当前数的第一个数的下标
int l = 0, r = n;
while (l < r)
{ int mid = l + r >> 1;if (nums[mid] > cur) r = mid;else l = mid + 1;
}
cout << l << endl;
// 不存在时,l为n
二、求小于当前数的第一个数的下标
int l = -1, r = n - 1;
while (l < r)
{int mid = l + r + 1 >> 1;if (nums[mid] < cur) l = mid;else r = mid - 1;
}
cout << l << endl;
// 不存在时,l为-1