二分查找变形记录

查找第一个值等于给定值的元素

function find(arr, value) {
            let low = 0
            let high = arr.length - 1
            while(low <= high){
                let mid = low + ((high - low) >> 1) // 取中间的索引
                if(arr[mid] > value){
                    high = mid - 1
                }else if(arr[mid] < value){
                    low = mid + 1
                }else{
                  // 如果当前的索引是0 那肯定当前元素就是第一个了
                  // 如果当前元素的上一个不等于要查找的值 那当前元素就是第一个
                    if((mid == 0) || (arr[mid - 1] != value)){ 
                        return mid
                    }else{
                        high = mid - 1
                    }
                }
            }
            return -1
        }

查找最后一个值等于给定值的元素

function find(arr, value) {
            let low = 0
            let high = arr.length - 1
            while(low <= high){
                let mid = low + ((high - low) >> 1)
                if(arr[mid] > value){
                    high = mid - 1
                }else if(arr[mid] < value){
                    low = mid + 1
                }else{
                    // 如果当前索引是最后一个 那肯定就是最后一个了
                    // 如果当前元素的后一个不是待查找的值 那当前元素就是最后一个
                    if((mid == arr.length - 1) || (arr[mid + 1] != value)){
                        return mid
                    }else{
                        low = mid + 1
                    }
                }
            }
            return -1
        }

查找第一个大于等于给定值的元素

function find(arr,value){
            let low = 0
            let high = arr.length - 1
            while(low <= high){
                let mid = low + ((high - low) >> 1)
                if(arr[mid] >= value){
                    if((mid == 0) || (arr[mid - 1] < value)){
                        return mid
                    }else{
                        high = mid - 1
                    }
                }else{
                    low = mid + 1
                }
            }
            return -1
        }

推荐阅读更多精彩内容

  • 栈 1. 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被...
    程序员高级码农阅读 5,356评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 124,473评论 18 136
  • 一、相关定义 查找——查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。所有这些...
    开心糖果的夏天阅读 598评论 0 8
  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 981评论 0 3
  • 力场分析能帮助我们察觉一件要推动事情的状态和达成目标能做的事情,通过学习有二点心得: 1 力场分析也是一...
    Jacky_e426阅读 405评论 0 1
  • 在读前阶段,如何帮助学生扫除一些影响文本理解的语言障碍? 今天主要介绍几种有用的读前活动! 1.match the...
    happy安晴阅读 71评论 0 0
  • 法国2015高中文科会考作文题 看到这个题目,我不由得陷入了沉思:我们经常说,生命是可贵的,那么我们是否要尊重所有...
    占卜之琳阅读 2,645评论 3 1