二分查找前提是输入的数组必须是有序的,首先设定左右边界线为数组的起始位置和结尾位置,比较目标值target与待查找数组中间位置mid的数值大小,若是大于,则目标值只可能存在于数组以中间值为分界线的右边区域,将左边界线更新为mid+1,若是小于mid,则只可能存在于左边区域,将右边界线更新为mid-1,就这样不断缩小查找范围,直到查找到目标值返回索引或查找完毕无目标值返回-1。
代码如下:
class Solution {
public:
/**
* 如果目标值存在返回下标,否则返回 -1
*/
int search(vector<int>& nums, int target) {
// write code here
int lf=0,index=-1;
int rg=nums.size()-1;
while(lf<=rg)
{
int mid=lf+(rg-lf)/2;
if(nums[mid]==target)
{
index=mid;
rg=mid-1;
}
else if(nums[mid]>target)
rg=mid-1;
else
lf=mid+1;
}
return index;
}
};