• 二分的一些总结(6个二分答案+1个二分查找)


    二分答案

    1 int l=0,r=1e9;
    2     while (l<=r){
    3         int mid=l+r>>1;
    4         if (check(mid)) l=mid+1,ans=mid;
    5             else r=mid-1;
    6     }

    查找=x的第一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]<x) l=mid+1;
    6         else ans=mid,r=mid-1;
    7     }
    8     return ans;
    9 }

    查找=x的最后一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]<=x) ans=mid,l=mid+1;
    6         else r=mid-1;
    7     }
    8     return ans;
    9 }

    查找小于x的最后一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]<x) ans=mid,l=mid+1;
    6         else r=mid-1;
    7     }
    8     return ans;
    9 }

    查找大于x的最先一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]>x) ans=mid,r=mid-1;
    6         else l=mid+1;
    7     }
    8     return ans;
    9 }

    查找大于等于x的最先一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]>=x) ans=mid,r=mid-1;
    6         else l=mid+1;
    7     }
    8     return ans;
    9 }

    查找小于等于x的最后一个数的下标

    1 int look(int l,int x){
    2     int ans=0,r=n;
    3     while(l<=r){
    4         int mid=l+r>>1;
    5         if(a[mid]<=x) ans=mid,l=mid+1;
    6         else r=mid-1;
    7     }
    8     return ans;
    9 }
  • 相关阅读:
    nodeJs-querystring 模块
    nodeJs-process对象
    nodejs-Path模块
    nodejs-os模块
    nodejs-CommonJS规范
    nodejs-Events模块
    nodejs-Http模块
    nodejs-Cluster模块
    转:AOP与JAVA动态代理
    转:jdk动态代理实现
  • 原文地址:https://www.cnblogs.com/zhouykblog/p/10023731.html
Copyright © 2020-2023  润新知