思路:题目思路就是要用二分法找到元素所在下标,在用二分法的过程中,注意
1.数组下标是从0开始,且设置中间值时,使用 middle=left+((right-left)>>2),若使用(right+left)/2,可能会出现数据溢出。
2.判断while循环时是left<=right,以及middle=left-1还是middle=left以及middle=right+1还是right,代入进去试一试即可,以及要判断自己最初设置的边界值是什么,比如最初设置left=0,right=nums.size()-1,这表明是一个左闭右闭区间,此时当middle<left或者middle>right时,middle=left-1以及middle=right+1,若middle=right,此时就可以取到right,但此时right是没必要取的。
以下附上代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;//定义左区间
int right=nums.size()-1;//定义右区间
while(left<=right) //判断条件
{
int middle=left+((right-left)>>2); //定义中间值
if(nums[middle]>target) //判断中间值与目标值的大小
{
right=middle-1;
}
else if(nums[middle]<target) //判断中间值与目标值的大小
{
left=middle+1;
}
else
{
return middle;
}
}
return -1;//根据题意,不存在则返回-1
}
};