lower_bound函数:返回第一个等于x的位置,若没有,返回-1。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid, ans = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (A[mid] >= x)
right = (ans = mid) - 1;
else
left = mid + 1;
}
if (A[ans] == x)
return ans;
else
return -1;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid, ans = 0;
int Asize = right;
while (left < right)
{
mid = left + (right - left) / 2;
if (A[mid] > x)
right = (ans = mid);
else
left = mid + 1;
}
if (A[ans] > x)
return ans;
else
return Asize;
}
算法笔记写法
lower_bound函数:返回第一个等于x的位置,若没有,返回N。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] >= x)
right = mid;
else
left = mid + 1;
}
return left;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] > x)
right = mid;
else
left = mid + 1;
}
return left;
}
这篇博客介绍了如何使用二分查找算法实现lower_bound和upper_bound函数,这两个函数分别用于在一个有序数组中找到等于特定值的第一个位置和大于特定值的第一个位置。如果找不到相应元素,lower_bound返回-1,upper_bound返回数组长度。提供的代码示例详细展示了这两个函数的实现过程。
1474

被折叠的 条评论
为什么被折叠?



