对于二分法,我们先要搞定,到底是开区间还是闭区间,其次就是由于开闭区间的不同,会导致部分代码出现轻微区别。这是最关键最容易错误的!!!
详细的解释和代码在下面
int left=0;//这是左闭
int right=nums.size()-1;//这是右闭 如果是右开改为right=nums。size();
while(left<=right){//注意由于是左闭右闭的区间,所以当左区间等于右区间的时候,就是数组中只有一个数的情况
int mid=left+((right-left)/2);//注意不是(left+right)/2;并且如果这个耗时高的话,可以将“/2”改为“>>1"用位运算提高运算效率
if(nums[mid]<target)left=mid+1;//如果是左开,就要把这里改为left=mid;因为左区间是取不到的
else if(nums[mid]>target)right=mid-1;//如果是右开,就要把这里改为right=mid;因为右区间是取不到的
else{ return mid;}
}
return -1;//如果找不到则返回-1;