二分查找的变形我不会,最简单的查找某个元素我的位置我是会的。
二分查找的16种代码,即(第一个 >= > <= < target 的元素,共4种)(数组元素升序、降序,共2种)(左边界、右边界,共2种)== 16种不同的代码
要求:16种代码的模板,和记忆的方法(就是什么情况代码的哪个地方该怎么写)。
注意:代码用C/C++写,并且用循环实现,不要用递归,代码类似下边这样。
int find(int x, int l, int r) // 第一个 >= x 的元素的下标 升序 左边界
{
int mid;
while (l <= r)
{
mid = (l + r) / 2;
if (a[mid] == x)
r = mid - 1;
if (a[mid] > x)
r = mid - 1;
if (a[mid] < x)
l = mid + 1;
}
return l;
}
int find(int x, int l, int r) // 第一个 >= x 的元素的下标 降序 左边界
{
int mid;
while (l <= r)
{
mid = (l + r) / 2;
if (a[mid] == x)
r = mid - 1;
if (a[mid] > x)
l = mid + 1;
if (a[mid] < x)
r = mid - 1;
}
return l;
}