二分查找
1、二分查找是从有序的、无重复的数组中查找元素的位置,并返回下标的一种快速查找方法。二分查找由目标元素与middle中间元素相比,不断缩小查找范围,知道找到目标元素,或未找到返回-1;
2、二分查找定区间,对于二分查找有初始时left=0,right=nums.size(),
middle=left + (right - left)/2;
3、二分查找的区间左闭右闭,即while(left<=right)。二分查找中middle=left + (right - left)/2可以防止数据溢出,若数组较大,left=right - 1时,两数相加除以二,可能会为负数。此处等同于(left+right)/2
4、代码为:
int search(vector<int>& nums, int target){
int left = 0, middle, right;
right = nums.size()-1;
while(left<=right){
middle = left + (right - left)/2;
if(nums[middle]==target){
return middle;
}
else if(nums[middle]<target){
left = middle + 1;
}
else{
right = middle - 1;
}
}
return -1;
}