zoukankan      html  css  js  c++  java
  • 二分

    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;

    }

     

     

     

  • 相关阅读:
    MFC中小笔记(四)
    MFC中小笔记(三)
    MFC中小笔记
    关于小蜘蛛诞生的坎坎坷坷
    Win32Api程序设计 常用域改变(设定)窗口位置、大小的api
    Win32Api程序设计 注册窗口类
    TCP segment of a reassembled PDU【转】
    计算机网络复习 -- 概念梳理
    指针(pointer) -- (上)
    原来我连真正的调试都不会,每次都是靠编译器(⊙﹏⊙)b
  • 原文地址:https://www.cnblogs.com/lmjer/p/7582851.html
Copyright © 2011-2022 走看看