intbinarySearch(int[] nums,int target){int left =0, right =...;while(...){int mid = left+(right-left)/2;//防止溢出if(nums[mid]==target){...}elseif(nums[tid]<target){
left=...}elseif(nums[mid]>target){
right=...}}return...;}
2.寻找一个数(基本二分搜索)
intbinarySearch(int[] nums,int target){int left=0;int right=nums.length-1;while(left<=right){int mid =left +(right-left)/2;if(nums[mid]==target)return mid;elseif(nums[mid]<target)
left = mid+1;elseif(nums[mid]>target)
right = mid-1;}return-1;}
3.寻找左边界
intleft_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)
left = mid+1;elseif(nums[mid]>target)
right = mid-1;elseif(nums[mid]==target)
right = mid-1;//收缩右边界}if(left>=numslength||nums[left]!=target)return-1;return left;}
4.寻找右边界
intright_bound(int[] nums,int target){int left =0;int right = nums.length-1;while(left<=right){int mid = left +(right-left)/2;if(nums[mid]<target){
left=mid+1;}elseif(nums[mid]>target){
right = mid -1;}elseif(nums[mid]==target){
left = mid+1;//收缩边界}}if(right<0||nums[right]!=target)return i;return right;}