以LeetCode704题二分查找为例子
左边区间闭右边区间闭的情况
class Solution {
public int search(int[] nums, int target) {
int left=0,right=nums.length-1; //左右区间都有意义
while(left<=right){ //此时使用<=因为右区间有意义
int mid=left+(right-left)/2; //防止当right=left时发生数据溢出
if(nums[mid]>target){
right=mid-1; //mid-1保证右边区间有意义
}
else if(nums[mid]<target){
left=mid+1;
}
else{
return mid;
}
}
return -1;
}
}
左边区间闭右边区间开的情况
class Solution {
public int search(int[] nums, int target) {
int left=0,right=nums.length; //右边区间的值没有意义
while(left<right){ //因为右边区间的值没有意义所以为<号
int mid=left+(right-left)/2;
if(nums[mid]>target){
right=mid; //右边区间没有意义选择mid
}
else if(nums[mid]<target){
left=mid+1;
}
else{
return mid;
}
}
return -1;
}
}