美文网首页
二分查找变形记录

二分查找变形记录

作者: Tiny_z | 来源:发表于2018-10-26 15:16 被阅读10次

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

    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
            }
    

    相关文章

      网友评论

          本文标题:二分查找变形记录

          本文链接:https://www.haomeiwen.com/subject/wpaktqtx.html