您的位置:首页 > 编程语言 > C语言/C++

LeetCode-34-Search for a Range(C语言实现)

2018-01-02 20:59 921 查看
/**

 * Return an array of size *returnSize.

 * Note: The returned array must be malloced, assume caller calls free().

 */

int bsearchLeft(int array[],int low,int high,int target)

{

    while(low<=high)

        {

            int mid=(low+high)/2;

            if(array[mid]>target || array[mid]==target && array[mid-1]==target)

                high=mid-1;

            else if(array[mid]<target)

            low=mid+1;

            else

                return mid;

        }

    return-1;

}

int bsearchRight(int array[],int low,int high,int target)

{

    while(low<=high)

        {

            int mid=(low+high)/2;

            if(array[mid]>target)

                high=mid-1;

            else if(array[mid]<target || array[mid]==target && array[mid+1]==target)

            low=mid+1;

            else

                return mid;

        }

    return-1;

}

int* searchRange(int* nums, int numsSize, int target, int* returnSize) {

    int l, r, i;

    int *res = (int*)malloc(sizeof(int) * numsSize);

    *returnSize = 2;

    if(numsSize == 0 || nums[0] > target || nums[numsSize-1] < target){

        res[0] = -1;

        res[1] = -1;

        return res;

    }

    if(nums[0] == target){

        l = 0;

        r = bsearchRight(nums,0,numsSize-1,target);

    }

    else if(nums[numsSize-1] == target){

        l = bsearchLeft(nums,0,numsSize-1,target);

        r = numsSize - 1;

    }

    else{

        l = bsearchLeft(nums,0,numsSize-1,target);

        r = bsearchRight(nums,0,numsSize-1,target);

    }

    res[0] = l;

    res[1] = r;

    return res;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: