题目描述:
给定一个n个元素的升序数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。
示例1:
输入:nums = [-1,0,3,5,9,12]; target = 9n
输出:4
解释:9 出现在nums中并且下标为4
示例2:
输入:nums = [-1,0,3,5,9,12]; target = 2
输出:-1
解释:2 未出现在nums中 因此返回-1
思路
因为是有序数组,故采用二分查找的思想,时间复杂度为O(logn)
代码实现:
#include <stdio.h>
int Search_val(int *nums,int n,int target)
{
int left = 0;
int right = n-1;
int mid;
while(left<=right) {
mid = (left+right)/2;
if (nums[mid] > target)
right = mid - 1;
else if(nums[mid] < target)
left = mid + 1;
else if(nums[mid] == target)
return mid;
}
return -1;
}
int main() {
int nums[6] = {-1,0,3,5,9,12};//定义数组
int n=6,target;
printf("请输入target的值:\n");
scanf("%d",&target);
int i = Search_val(nums,n,target);
printf("%d\n",i);//输出结果
return 0;
}