这道题目强调这是一个有序数组,并且没有重复元素,这都是二分法使用的前提条件(如果有重复元素,可能用二分法找到的下标不是唯一
还是没有搞清楚区间的影响
——区间的选择其实是对右边界的选择有影响
有两种区间,一种是左闭右闭区间,还有一种是左闭右开区间
当边界变动值为中间值,当需要变动时,说明中间值不是目标值,所以中间值不可以被选择,所以当是左右都是闭区间时,右边界为nums[mid-1],反之为nums[mid]
左闭右闭
int search(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize-1;
int middle = 0;
while(left<=right) {
middle = (left+right)/2;
if(nums[middle] > target) {
right = middle-1;
}
else if(nums[middle] < target) {
left = middle+1;
}
else if(nums[middle] == target){
return middle;
}
}
return -1;
}
左闭右开
int search(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize-1;
int middle = 0;
while(left<right) {
middle = (left+right)/2;
if(nums[middle] > target) {
right = middle;
}
else if(nums[middle] < target) {
left = middle+1;
}
else if(nums[middle] == target){
return middle;
}
}
return -1;
}