问题标题: 酷町堂:2773

0
0

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
我要回答