给定一个 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
思想:定义一个low指向数组的第一个元素,定义一个high指向数组的最后的一个元素,定义一个mid指向数组的中间那个元素。将中间元素与目标元素进行比较,如果相等,则返回其下标mid。如果中间元素小于目标元素,则目标元素在数组右边,将low移动到low+1位置。如果目标元素小于之间元素,则目标元素在数组左边,将high移动到high+1位置。然后对相应的左表或者右表重复上述操作,查找成功返回mid,差找失败,返回-1。
代码:
int search(int* nums, int numsSize, int target) {
int low=0;int high=numsSize-1,mid;
while(low<=high){
mid=(low+high)/2;
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
low=mid+1;
}else{
high=mid-1;
}
}
return -1;
}
时间复杂度O(longn),空间复杂度O(1)