给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 1:
输入:nums
= [-1,0,3,5,9,12],target
= 9 输出: 4 解释: 9 出现在nums
中并且下标为 4
示例 2:
输入:nums
= [-1,0,3,5,9,12],target
= 2 输出: -1 解释: 2 不存在nums
中因此返回 -1
int search(int* nums, int numsSize, int target) {
//将数组的下标最小值与下标最大值存放
int l=0;
int r=numsSize-1;
//由于数组为升序,所以只需要将target与数组中间值做对比
//既可知道target是在数组中间值的哪一边
while(l<=r){
//求数组中间值的下标
int m=l+(r-l)/2;
//当target等于数组中间值,返回m,既数组中间值的下标
if(target==nums[m]){
return m;
}
//当target大于数组中间值,target就可能在数组中间值右边
//此时需要再次查找,但只需在数组中间值右边查找即可,由此得出
//此时数组下标最小值为数组中间值下标加1,下标最大值不变,既l=m+1;
else if(target>nums[m]){
l=m+1;
}
//同理可得
else{
r=m-1;
}
}
return -1;
}