二分搜索模板

搜索区间统一为两端关闭即[left,right]

普通二分搜索

int binary_search(int[] nums,int target){
   int left=0,right=nums.length-1;
   while(left<=right){
       int mid = left+(right-left)/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;
}

左侧搜索二分

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

右侧搜索二分

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

 

posted @ 2021-12-31 17:09  DXYE  阅读(33)  评论(0编辑  收藏  举报