二分法在对有序序列的处理上可以达到O(lg(n))的时间复杂度,通常用在二分查找上。
此时有一个有序序列,给定一个数n,n可以在这个序列中也可以不在,要求找到第一个大于n的数和第一个小于n的数。
实际上,只需要在二分法的基础上稍加改动即可达到需求
二分查找n的下标
int binaryFind(vector<int>& nums, int n)
{
int left = 0;
int right = nums.size() - 1;
while(left < right)
{
int middle = (left + right) / 2;
if(nums[middle] > n)
right = middle