10.LeetCode之搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

示例 1:
输入: [1,3,5,6], 5
输出: 2

示例 2:
输入: [1,3,5,6], 2
输出: 1

示例 3:
输入: [1,3,5,6], 7
输出: 4

示例 4:
输入: [1,3,5,6], 0
输出: 0

代码:折半查找法

//折半查找法
int searchInsert(int* nums, int numsSize, int target) {
    
    int low=0, high=numsSize-1, mid;
        
    while( low<=high ) //折半查找(查找成功元素下标为mid,查找不成功low>high)
    {
        mid = (low+high)/2;
        if( nums[mid]==target )
            return mid;
        else if( target<nums[mid] )
            high = mid-1;
        else
            low = mid+1;
    }
    if( low>high )
        return low; //nums[low]为比target大的下一个元素下标,即插入位置
 
    return 0; //满足非常规情况下的返回要求,否则提示错误
}

在原题条件下,将target插入到数组中(前提是数组的空间>原数组元素的数目)

代码:折半查找法+循环后移

//折半查找法
int searchInsert(int* nums, int numsSize, int target) {
    int low=0, high=numsSize-1, mid;
    int i;
        
    while( low<=high ) //折半查找(查找成功元素下标为mid,查找不成功low=high)
    {
        mid = (low+high)/2;
        if( nums[mid]==target )
            return mid;
        else if( target<nums[mid] )
            high = mid-1;
        else
            low = mid+1;
    }
    if( low>high )
    {
        for( i=numsSize-1; i>high; i-- ) //循环后移,插入target
            nums[i+1] = nums[i]; //此时i+1=low
        nums[++i] = target;
        return i; //此时i==low
    }
    
    return 0; //满足非常规情况下的返回要求,否则提示错误
}

猜你喜欢

转载自blog.csdn.net/qq_39564672/article/details/88071555