NO.34 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
    *returnSize=2;
    int *ret=(int *)malloc(sizeof(int)*(*returnSize));
    ret[0]=-1;
    if(numsSize<1)
    {
        ret[1]=-1;
        return ret;
    }
    int left=0,right=numsSize,medium=(left+numsSize)/2;
    for(;lefttarget)
        {
            right=medium;
        }
        else
        {
            left=medium;
        }
    }
    if(nums[medium]==target)ret[0]=medium;
    else if(nums[left]==target)ret[0]=left;
    else if(nums[right-1]==target)ret[0]=right-1;
    else
    {
        ret[1]=-1;
        return ret;
    }
    ret[1]=ret[0];
    for(left=0,right=ret[0],medium=(right+left)/2;leftleft?ret[1]:left;
    return ret;
}

执行用时 : 12 ms, 在Find First and Last Position of Element in Sorted Array的C提交中击败了99.46% 的用户

内存消耗 : 8.7 MB, 在Find First and Last Position of Element in Sorted Array的C提交中击败了78.35% 的用户

1.先查找该值是否存在,确定一个target出现的位置n

2.从n位置前向查找最后一个target出现的位置

23从n位置后向查找最后一个target出现的位置

你可能感兴趣的:(C/C++,leetcode)