0
已采纳
徐云皓
新手天翼
新手天翼
int findFirst(int a[],int n,int k)
{
int l=1,r=n;
while(l<r)
{
int mid=(l+r+1)/2;
/*
a/b
(a+b)/b
*/
if(k<=a[mid])r=mid-1;
else l=mid;
}
if(a[1]==k)return 1;
if(r<n && a[r+1]==k)return r+1;
return -1;
}
函数部分
0
徐云皓
新手天翼
新手天翼
二分第三种:有重复元素,求最后一次出现的位置
t表示待查找元素
int l=1,r=n+1,mid;
while (l<r)
{
mid=(l+r)/2;
if (a[mid]>k) r=mid;
else l=mid+1;
}
if (a[l-1]!=k) cout<<-1<<endl;
else cout<<l-1<<endl;
0