例如,如果list= [2,3,3,4,5,7,7,9,10],
我想返回索引 1。
在这种情况下,没有目标参数,这与我们通常进行二分搜索的方式不同
[更新]
[这是我现在拥有的代码。它应该返回 1,因为第一次出现多个值(即 2(位于索引 1 处
代码照片链接
[更新]
像往常一样执行二进制搜索;但是当您到达要搜索的项目时,请继续向左搜索。
即:
- 将
min
设置为第一个索引,max
设置为最后一个索引(加一(。 - 看看中间的那个(
(min+max)/2
(。 - 如果该值大于您要搜索的值,请将该索引设置为
max
;否则min
该索引(加一(。 - 重复此操作,直到找到具有所需值的索引。
- 到目前为止,这只是常规的二进制搜索。现在存储该索引;它是您当前的最佳候选人。表现得好像您找到的值大于您要查找的值(即,
max
该索引(,然后继续搜索。
当您的搜索空间不足时(即min
=max
(,您找到的最后一个"候选"是您搜索的值的最低索引。
我正在分享您的代码片段,这将有助于找到您的答案
int leftIndex(int arr[], int n, int x)
{
int l = 0, h = n-1;
int mid = 0;
while(l <= h)
{
mid = l + (h-l)/2;
if(arr[mid] == x && (mid == 0 || arr[mid-1] != x))
return mid;
else if(arr[mid] >= x)
h = mid-1;
else l = mid + 1;
}
return -1;
}
你只需要理解这段代码。 这就像二进制搜索代码一样简单。只是一个条件,我们需要修改 以便我们可以获得所需的结果