前提
有序数组且无重复元素
易错点
区间边界问题
while (left < right)
or
while (left <= right)
if (num[middle] > target){
right = middle;
or
right = middle - 1;
}
左闭右闭写法
left = 0;
right = numsize - 1;
while (left <= right){
middle = (left - right)/2;
if(num[middle] > targe){ //目标值在左侧
right = middle-1;
}else if(num[middle] < targe){ //目标值在右侧
left = middle+1;
}else return middle; //目标值就在中间
}
//没找到
return -1;
左闭右开写法
left = 0;
right = numsize;
while (left < right){
middle = (left - right)/2;
if(num[middle] > targe){ //目标值在左侧
right = middle; //左闭右开,不包含right,直接=middle即可
}else if(num[middle] < targe){ //目标值在右侧
left = middle+1; //接下来的区间不需要包含middle
}else return middle; //目标值就在中间
}
//没找到
return -1;