• 二分


    14.二分

    #include<stdio.h>

    int a[100000];

    int main(){

       int n;

       scanf("%d",&n);

       for (int i=0;i<n;i++){

        scanf("%d",&a[i]);

       }

       int m;

       scanf("%d",&m);

       int l=0;//l从0开始

       int r=n-1;//r从n-1;

       int mid;

       while(l<=r){

        mid=(l+r)/2;

        if(a[mid]==m) break;

        if(a[mid]>m) l=mid+1;//+1

        else r=mid-1;//-1

       }

       printf("%d ",mid+1);

    return 0;

    }

    15.查找第一个等于或者大于key的元素

     查找第一个等于或者大于key的元素,也就是说等于查找key值的元素有好多个,返回这些元素最左边的元素下标;如果没有等于key值的元素,则返回大于key的最左边元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]>=key)

            r=mid-1;

        else l=mid+1;

       }

       return l;

    }

    16.查找第一个大于key的元素

    查找第一个等于key的元素,也就是说返回大于key的最左边元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]>key)

            r=mid-1;

        else l=mid+1;

       }

       return l;

    }

    17.查找最后一个小于key的元素

    查找最后一个小于key的元素,也就是说返回小于key的最右边元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]>=key)

            r=mid-1;

        else l=mid+1;

       }

       return r;

    }

    18.查找最后一个等于或者小于key的元素

    查找最后一个等于或者小于key的元素,也就是说等于查找key值的元素有好多个,返回这些元素最右边的元素下标;如果没有等于key值的元素,则返回小于key的最右边元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]>key)

            r=mid-1;

        else l=mid+1;

       }

       return r;

    }

    19.查找最后一个与key相等的元素

    查找最后一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最右边的元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]<=key)

            r=mid-1;

        else l=mid+1;

       }

       if (r >= 0 && a[r] == key) {

            return r;

        }

     

       return -1;

    }

    20.查找第一个与key相等的元素

    查找第一个相等的元素,也就是说等于查找key值的元素有好多个,返回这些元素最左边的元素下标。

    #include<stdio.h>

    int seach(int key){

       int l=0;

       int r=n-1;

       while(l<=r){

        int mid=(l+r)/2;

        if(a[mid]>=key)

            r=mid-1;

        else l=mid+1;

       }

       if (left < n && a[l] == key) {

            return l;

        }

       return -1;

    }

     

     

     

  • 相关阅读:
    CKEditor配置
    Asp.net中防止用户多次登录的方法【转】
    Android sharedUserId研究记录
    Android Wifi模块学习
    你应该知道的asp.net 之 服务器端包括指令
    钻牛角尖之try return finally
    .NET集合总结
    web debugger fiddler 使用小结
    钻牛角尖之Request.Cookies与Response.Cookies
    speeding up your web site 前端性能优化规则(一)
  • 原文地址:https://www.cnblogs.com/lmjer/p/7582851.html
Copyright © 2020-2023  润新知