二分查找

141 阅读1分钟

1.基础的二分搜索框架


           function search(nums,target){
            let left=0,right=nums.length-1;
            while(left<=right){
                let mid=left+(left+right)/2;
                if(nums[mid]<target){
                    left=mid+1;
                }
                else if(nums[mid]>target){
                    right=mid-1;
                }
                else if(nums[mid]==target){
                   return mid;
                }
            }
            return -1;
        }
     
    

2.寻找左侧边界的二分搜索

       function search(nums,target){
            let left=0,right=nums.length-1;
            while(left<=right){
                let mid=left+(left+right)/2;
                if(nums[mid]<target){
                    left=mid+1;
                }
                else if(nums[mid]>target){
                    right=mid-1;
                }
                else if(nums[mid]==target){
                   right=mid-1;
                }
            }
           if(left>=nums.length||nums[left!==target]){
               return -1;
           }
        }

3.寻找右侧边界的二分搜索


       function search(nums,target){
            let left=0,right=nums.length-1;
            while(left<=right){
                let mid=left+(left+right)/2;
                if(nums[mid]<target){
                    left=mid+1;
                }
                else if(nums[mid]>target){
                    right=mid-1;
                }
                else if(nums[mid]==target){
                   left=mid+1;
                }
            }
           if(right<0||nums[right]!==target){
               return -1;
           }
        }