zoukankan      html  css  js  c++  java
  • 二分法搜索范围

    //二分法搜索范围,返回 [start,end] 或者 index
    function findScope(str,hasSortArr,callback) {
      var lm,rm;
      var l=0,r=hasSortArr.length;
      var has=false;
      while(l<r){
        const m=(l+r)>>1;
        //比较下坐标大小
        const dis=callback(str,hasSortArr[m])
        if(dis>0){
          l=Math.max(m,l+1)
        }else if(dis<0){
          r=Math.min(m,r-1)
        }else{
          lm=l;
          rm=r;
          l=r=m
          has=true;
        }
      }
      if(has){
        while (lm<l){
          const m=(l+lm)>>1;
          //比较下坐标大小
          const dis=callback(str,hasSortArr[m])
          if(dis>0){
            lm=Math.max(m,lm+1)
          }else{
            l = Math.min(m, l - 1)
          }
        }
        while (rm>r){
          const m=(r+rm)>>1;
          //比较下坐标大小
          const dis=callback(str,hasSortArr[m])
          if(dis<0){
            rm=Math.min(m,rm-1)
          }else {
            r = Math.max(m, r + 1)
          }
        }
        return [l,r];
      }
      return l
    }
    
    const index=findScope(10,[1,3,4,4,4,5],function (p1,p2) {
        return p1-p2
    })
    console.log(index)
    

      

  • 相关阅读:
    web页面静态化与伪静态化
    mysql 优化之空间换时间
    QPS、PV、UV、RT 之间的关系
    接口
    MySQL 索引
    名词解释
    go 语言标识符
    Git版本控制与工作流
    Maven安装与配置
    IDEA工具使用说明
  • 原文地址:https://www.cnblogs.com/caoke/p/13709471.html
Copyright © 2011-2022 走看看