二分 第一次出现的位置,最后一次出现的位置

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;

class mysolve
{
public:

    int a[20];
    int binary_first(int a[],int len,int key)//第一次出现的位置
    {
        int left=0;
        int right=len-1;
        while(left<right)
        {
            int mid=(left+right)/2;
            if(a[mid]<key)
                left=mid+1;
            else
                right=mid;


        }
        if(a[left]==key)
            return left;
        return -1;
    }

    int binary_second(int a[],int len,int key)//最后一次出现的位置
    {
        int left=0;
        int right=len-1;
        while(left<right-1)
        {
            int mid=(left+right)/2;
            if(a[mid]>key)
               right=mid-1;
            else  left=mid;

        }
        if(a[right]==key)
            return right;
        else if(a[left]==key)
            return left;
        else return -1;
    }
    int putong(int a[],int len,int key)
    {
        int left=0;
        int right=len-1;
        while(left<=right)
        {
            int mid=(left+right)/2;
            if(a[mid]<key)
                left=mid+1;
            else if(a[mid]==key)
                return mid;

            else
                right=mid-1;
        }
        return -1;
    }


};



int main()
{
    mysolve solve;

    int z[20]= {1,2,2,2,2,2,2,2,2,2,3};
    memcpy(solve.a,z,sizeof(int)*20);
    cout<<solve.binary_first(solve.a,11,2)<<endl;
    cout<<solve.binary_second(solve.a,11,2)<<endl;
    cout<<solve.putong(solve.a,11,2);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值