1.数组元素不重复,查找k值位置,查找不到返回-1
int bin_search(int l,int r,int k)
{
while(l<=r)
{
int mid = (l+r)/2;
if(a[mid]==k)
return k;
else if(a[mid]>k)
r=mid-1;
else if(a[mid]<k)
l=mid+1;
}
return -1;
}
2.查找第一个等于k的数的位置
int bin_search(int l,int r,int k)
{
while(l<=r)
{
int mid = (l+r)/2;
if(a[mid]==k)
r=mid-1;
else if(a[mid]<k)
l=mid+1;
else
r=mid-1;
}
if(a[r+1]==k)
return r+1+1;
return -1;
}
3.查找最后一个等于k的数的位置
int bin_search(int l,int r,int k)
{
while(l<=r)
{
int mid = (l+r)/2;
if(a[mid]==k)
l=mid+1;
else if(a[mid]>k)
r=mid-1;
else if(a[mid]<k)
l=mid+1;
}
//循环终止时,l>r,此时l-1应该是上一个可能满足a[mid]==k的地方因此要看看a[l-1]是否等于k
if(a[l-1]==k)return l-1;
return -1;
}
3146

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



