二分查找的寻找左右边界,有很多博主给出了各种各样的代码,边界条件很容易搞错。其实只要设置一个标志位,不断更新寻找到目标值的标志位即可。以下为代码。
寻找左边界代码如下:
int leftsearch(int *nums, int left, int right, int target)
{
int flag = -1;
while(left <= right)
{
int mid = (right - left) / 2 + left;
if(nums[mid] == target)
{
flag = mid;
right = mid - 1;
}
else if(nums[mid] > target)
{
right = mid - 1;
}
else if(nums[mid] < target)
{
left = mid + 1;
}
}
return flag > -1 ? flag : -1;
}
同理,寻找右边界代码如下:
int rightsearch(int *nums, int left, int right,int target)
{
int flag = -1;
while(left <= right)
{
int mid = (right - left) / 2 + left;
if(nums[mid] == target)
{
flag = mid;
left = mid + 1;
}
else if(nums[mid] > target)
{
right = mid - 1;
}
else if(nums[mid] < target)
{
left = mid + 1;
}
}
return flag > -1 ? flag : -1;
}
如此,就省略了 对边界条件的各种讨论。