LeetCode 之 Search Insert Position — C 实现

来源:互联网 发布:网络维护工程师工资 编辑:程序博客网 时间:2024/06/08 04:17

Search Insert Position

 

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

给定一个顺序数组和一个目标值,如果目标值存在数组中返回其在数组中的索引。如果不存在,返回其按序应该插入的位置。

假设数组中没有重复的数字。

例如:

[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

分析:

法1:顺序查找数组,直到找到大于等于目标值的第一个位置,该位置就是要找的位置。复杂度 O(n)。


int searchInsert(int* nums, int numsSize, int target) {    int index = 0;        if(!nums)        return -1;        for(; index < numsSize; ++index)    {        if(nums[index] < target)        {            continue;        }        else if(nums[index] >= target)        {            return index;        }    }        return index;}


法2:二分法查找,查找大于等于目标值的位置。复杂度 O(logn)。


int searchInsert(int* nums, int numsSize, int target) {    int low = 0, high = numsSize-1;    int mid = 0;        if(!nums)/*空指针*/    {        return 0;    }        /*二分查找*/    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;        }    }        if(nums[mid] < target)/*不在数组中,数组中最后参与比较的值的索引是mid*/    {        return (mid+1);    }            return mid;}



0 0
原创粉丝点击