二分查找变形记录

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

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
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,258评论 19 139
  • 一、相关定义 查找——查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。所有这些...
    开心糖果的夏天阅读 1,219评论 0 8
  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 1,641评论 0 3
  • 力场分析能帮助我们察觉一件要推动事情的状态和达成目标能做的事情,通过学习有二点心得: 1 力场分析也是一...
    Jacky_e426阅读 818评论 0 1
  • 在读前阶段,如何帮助学生扫除一些影响文本理解的语言障碍? 今天主要介绍几种有用的读前活动! 1.match the...
    happy安晴阅读 212评论 0 0