Day20 算法题-28题:找升序数组的目标值

37 阅读1分钟

题目描述:

给定一个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;
}

输出结果:

屏幕截图 2023-03-21 111136.png